§
    	�’jÛ!  ã                  óx  — U d Z ddlmZ ddlZddlmZ ddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ er!ddlZ eej        ¦  «         ed¦  «        k    ZerddlmZ daded<   g aded<   eadaded<   da ded<   h d£h d£dœZ!dZ"d=d>d„Z#d?d@d„Z$d„ Z%dAd „Z&d!„ Z'i ej(        d"“ej)        d"“ej*        d#“ej+        d#“ej,        d$“ej-        d$“ej.        d%“ej/        d%“ej0        d“ej1        d“ej2        d“ej3        d“ej4        d&“ej5        d&“ej6        d'“ej        d(“ej7        d)“ej8        d*ej9        d+ej:        d,ej;        d-ej<        d-ej=        d.ej>        d.ej?        d/ej@        d/eAdejB        di¥ZCd0„ ZDd1„ ZE e# e
d2¦  «        ¦  «         d3„ ZFd.d-d/d4œZGdAd5„ZHd=dBd7„ZId=dBd8„ZJd=d>d9„ZKdCd;„ZLdDd<„ZMdS )EzL
Expressions
-----------

Offer fast expression evaluation through numexpr

é    )ÚannotationsN)ÚTYPE_CHECKING)Ú
get_option)Únp_version_gt2_3)Úfind_stack_level)Ú	roperator)ÚNUMEXPR_INSTALLED)ÚVersionz2.11.0)ÚFuncTypezbool | NoneÚ
_TEST_MODEú
list[bool]Ú_TEST_RESULTzFuncType | NoneÚ	_evaluateÚ_where>   ÚboolÚint32Úint64Úfloat32Úfloat64>   r   r   r   )ÚevaluateÚwherei@B TÚvr   ÚreturnÚNonec                óŽ   — t           rt          r
t          sdan| at          rt          nt
          at          rt          nt          a	d S )NF)
r	   r   Ú	ne_gt_211ÚUSE_NUMEXPRÚ_evaluate_numexprÚ_evaluate_standardr   Ú_where_numexprÚ_where_standardr   ©r   s    úQC:\Projects\DSCons\.venv\Lib\site-packages\pandas\core\computation\expressions.pyÚset_use_numexprr$   2   sN   € õ ð Ýð 	¥Ið 	ð  ˆKˆKàˆKõ
 &1ÐHÕ!Ð!Õ6H€IÝ*Ð?�^ˆ^µ€F€F€Fó    c                ó|   — t           r2t          r-| €t          j        ¦   «         } t          j        | ¦  «         d S d S d S ©N)r	   r   ÚneÚdetect_number_of_coresÚset_num_threads)Úns    r#   Úset_numexpr_threadsr,   D   sQ   € õ ð �[ð Øˆ9ÝÔ)Ñ+Ô+ˆAÝ
Ô˜1ÑÔÐÐÐðð ð ð r%   c                óF   — t           rt          d¦  «          | ||¦  «        S )z
    Standard evaluation.
    F)r   Ú_store_test_result)ÚopÚop_strÚleft_opÚright_ops       r#   r   r   M   s,   € õ ð "Ý˜5Ñ!Ô!Ð!Øˆ2ˆg�xÑ Ô Ð r%   c                óØ   — |�g|j         t          k    rWt          ¦   «         }||fD ]"}t          |d¦  «        r||j        j        hz  }Œ#t          |¦  «        rt          |         |k    rdS dS )z2return left_op boolean if we WILL be using numexprNÚdtypeTF)ÚsizeÚ_MIN_ELEMENTSÚsetÚhasattrr4   ÚnameÚlenÚ_ALLOWED_DTYPES)r/   r0   r1   r2   Údtype_checkÚdtypesÚos          r#   Ú_can_use_numexprr?   V   s~   € àÐàŒ<�-Ò'Ð'å"™uœuˆFØ˜xÐ(ð -ð -�å˜1˜gÑ&Ô&ð -Ø˜qœwœ|˜nÑ,�Føõ �v‘;”;ð ¥/°+Ô">À&Ò"HÐ"HØ�tàˆ5r%   c                óž  — d }t          | |||d¦  «        r‹| j                             d¦  «                             d¦  «        }|r||}}|}|}	 t	          j        d|› d�||dœd¬¦  «        }n.# t          $ r Y n"t          $ r t          |||¦  «        rn‚ Y nw xY w|r||}}t          rt          |d u¦  «         |€t          | |||¦  «        }|S )	Nr   Ú_Úrzleft_value z right_value)Ú
left_valueÚright_valueÚsafe©Ú
local_dictÚcasting)r?   Ú__name__ÚstripÚ
startswithr(   r   Ú	TypeErrorÚNotImplementedErrorÚ_bool_arith_fallbackr   r.   r   )r/   r0   r1   r2   ÚresultÚis_reversedrC   rD   s           r#   r   r   i   s8  € Ø€Få˜˜F G¨X°zÑBÔBð 2Ø”k×'Ò'¨Ñ,Ô,×7Ò7¸Ñ<Ô<ˆØð 	2à (¨'�XˆGàˆ
Øˆð	Ý”[Ø2˜fÐ2Ð2Ð2Ø*4À[ÐQÐQØðñ ô ˆFˆFøõ
 ð 	ð 	ð 	ð ˆDÝ"ð 	ð 	ð 	Ý# F¨G°XÑ>Ô>ð Øàð �ð	øøøð ð 	2à (¨'�XˆGåð /Ý˜6¨Ð-Ñ.Ô.Ð.à€~Ý# B¨°¸ÑBÔBˆà€Ms   ÁA- Á-
BÁ9BÂBú+Ú*ú-ú/z**z==z!=z<=ú<z>=ú>ú&ú|ú^c                ó.   — t          j        | ||¦  «        S r'   )Únpr   )Úcondr1   r2   s      r#   r!   r!   ¶   s   € åŒ8�D˜' 8Ñ,Ô,Ð,r%   c                óŒ   — d }t          d d||d¦  «        rt          j        d| ||dœd¬¦  «        }|€t          | ||¦  «        }|S )Nr   z#where(cond_value, a_value, b_value))Ú
cond_valueÚa_valueÚb_valuerE   rF   )r?   r(   r   r!   )r\   r1   r2   rO   s       r#   r    r    »   se   € à€Få˜˜g w°¸'ÑBÔBð 
Ý”Ø1Ø&*°wÈ8ÐTÐTØð
ñ 
ô 
ˆð €~Ý   w°Ñ9Ô9ˆà€Mr%   zcompute.use_numexprc                ó†   — 	 | j         t          k    S # t          $ r$ t          | t          t          j        f¦  «        cY S w xY wr'   )r4   r   ÚAttributeErrorÚ
isinstancer[   Úbool_)Úxs    r#   Ú_has_bool_dtyperf   Ð   sK   € ð/ØŒw�$ŠÐøÝð /ð /ð /Ý˜!�d¥B¤HÐ-Ñ.Ô.Ð.Ð.Ð.ð/øøøs   ‚ ’+A ¿A )rQ   rR   rS   c                óÀ   — t          |¦  «        rNt          |¦  «        r?| t          v r6t          j        d| ›dt          |          ›d�t	          ¦   «         ¬¦  «         dS dS )z¨
    Check if we should fallback to the python `_evaluate_standard` in case
    of an unsupported operation by numexpr, which is the case for some
    boolean ops.
    z'evaluating in Python space because the z> operator is not supported by numexpr for the bool dtype, use z	 instead.)Ú
stacklevelTF)rf   Ú_BOOL_OP_UNSUPPORTEDÚwarningsÚwarnr   )r0   r1   r2   s      r#   rN   rN   Ú   s�   € õ �wÑÔð ¥O°HÑ$=Ô$=ð ØÕ)Ð)Ð)ÝŒMðA¸&ð Að Aå+¨FÔ3ðAð Að Aõ ,Ñ-Ô-ð	ñ ô ð ð �4Øˆ5r%   Úuse_numexprc                ól   — t           |          }|�|rt          | |||¦  «        S t          | |||¦  «        S )a  
    Evaluate and return the expression of the op on left_op and right_op.

    Parameters
    ----------
    op : the actual operand
    left_op : left operand
    right_op : right operand
    use_numexpr : bool, default True
        Whether to try to use numexpr.
    )Ú_op_str_mappingr   r   )r/   r1   r2   rl   r0   s        r#   r   r   ì   sD   € õ ˜RÔ €FØÐØð 	<å˜R ¨°(Ñ;Ô;Ð;Ý˜b &¨'°8Ñ<Ô<Ð<r%   c                ó\   — t           €J ‚|rt          | ||¦  «        S t          | ||¦  «        S )a  
    Evaluate the where condition cond on left_op and right_op.

    Parameters
    ----------
    cond : np.ndarray[bool]
    left_op : return if cond is True
    right_op : return if cond is False
    use_numexpr : bool, default True
        Whether to try to use numexpr.
    )r   r!   )r\   r1   r2   rl   s       r#   r   r      s<   € õ ÐÐÐØð 8Ý�d˜G XÑ.Ô.Ð.å˜t W¨hÑ7Ô7Ð7r%   c                ó   — | a g adS )z¯
    Keeps track of whether numexpr was used.

    Stores an additional ``True`` for every successful use of evaluate with
    numexpr since the last ``get_test_result``.
    N)r   r   r"   s    r#   Úset_test_moderq     s   € ð €JØ€L€L€Lr%   Úused_numexprc                óB   — | rt                                | ¦  «         d S d S r'   )r   Úappend)rr   s    r#   r.   r.     s.   € Øð *Ý×Ò˜LÑ)Ô)Ð)Ð)Ð)ð*ð *r%   c                 ó   — t           } g a | S )z1
    Get test result and reset test_results.
    )r   )Úress    r#   Úget_test_resultrw   $  s   € õ
 €CØ€LØ€Jr%   )T)r   r   r   r   r'   )r   r   )r   r   )rl   r   )rr   r   r   r   )r   r   )NÚ__doc__Ú
__future__r   ÚoperatorÚtypingr   rj   Únumpyr[   Úpandas._configr   Úpandas.compat.numpyr   Úpandas.util._exceptionsr   Úpandas.corer   Úpandas.core.computation.checkr	   Úpandas.util.versionr
   Únumexprr(   Ú__version__r   Úpandas._typingr   r   Ú__annotations__r   r   r   r   r;   r6   r$   r,   r   r?   r   ÚaddÚraddÚmulÚrmulÚsubÚrsubÚtruedivÚrtruedivÚfloordivÚ	rfloordivÚmodÚrmodÚpowÚrpowÚeqÚleÚltÚgeÚgtÚand_Úrand_Úor_Úror_ÚxorÚrxorÚdivmodÚrdivmodrn   r!   r    rf   ri   rN   r   r   rq   r.   rw   © r%   r#   ú<module>r£      s)  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø €€€à Ð Ð Ð à %Ð %Ð %Ð %Ð %Ð %à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à !Ð !Ð !Ð !Ð !Ð !Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'àð =ØÐÐÐà�˜œÑ'Ô'¨7¨7°8Ñ+<Ô+<Ò<€Iàð (Ø'Ð'Ð'Ð'Ð'Ð'à€
Ð Ð Ð Ñ Ø€Ð Ð Ð Ñ Ø€Ø!€	Ð !Ð !Ð !Ñ !Ø€Ð Ð Ð Ñ ð AÐ@Ð@Ø)Ð)Ð)ðð €ð €ð@ð @ð @ð @ð @ð$ð ð ð ð ð!ð !ð !ðð ð ð ð&&ð &ð &ðR!Ø„L�#ð!à„N�Cð!ð „L�#ð!ð „N�Cð	!ð
 „L�#ð!ð „N�Cð!ð Ô�cð!ð Ô˜ð!ð Ô�tð!ð Ô˜ð!ð „L�$ð!ð  „N�Dð!!ð" „L�$ð#!ð$ „N�Dð%!ð& „K�ð'!ð( „K�ð)!ð* „K�ð+!ð, „K�Ø„K�Ø„K�Ø„M�3Ø„O�SØ„L�#Ø„N�CØ„L�#Ø„N�CØ
ˆDØÔ�tðA!ð !€ðH-ð -ð -ð
ð ð ð$ €�
�
Ð0Ñ1Ô1Ñ 2Ô 2Ð 2ð/ð /ð /ð ! s°Ð5Ð5Ð ðð ð ð ð$=ð =ð =ð =ð =ð(8ð 8ð 8ð 8ð 8ð&	ð 	ð 	ð 	ð 	ð*ð *ð *ð *ð
ð ð ð ð ð r%   