Ë
    u™ãj¡$  ã                  ó@  — 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mZmZ erddl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d7d8d„Z d9d:d„Z!d„ Z"d„ Z#d;d„Z$d„ Z%d„ Z&i ejN                  d“ejP                  d“ejR                  d“ejT                  d“ejV                  d“ejX                  d“ejZ                  d“ej\                  d“ej^                  d“ej`                  d“ejb                  d“ejd                  d“ejf                  d “ejh                  d “ejj                  d!“ej*                  d"“ejl                  d#“ejn                  d$ejp                  d%ejr                  d&ejt                  d'ejv                  d'ejx                  d(ejz                  d(ej|                  d)ej~                  d)e@dej‚                  di¥ZBd*„ ZCd+„ ZDd,„ ZE e ed-   d.   «       d/„ ZFd(d'd)d0œZGd;d1„ZHd7d<d2„ZId7d<d3„ZJd7d8d4„ZKd=d5„ZLd>d6„ZMy)?zL
Expressions
-----------

Offer fast expression evaluation through numexpr

é    )ÚannotationsN)ÚTYPE_CHECKING)Ú_global_config)Úfind_stack_level)Ú	roperator)ÚNUMEXPR_BLOCKED_VERSIONÚNUMEXPR_INSTALLEDÚwarn_numexpr_blocked)ÚFuncTypezbool | NoneÚ
_TEST_MODEú
list[bool]Ú_TEST_RESULTzFuncType | NoneÚ	_evaluateÚ_where>   ÚboolÚint32Úint64Úfloat32Úfloat64>   r   r   r   )ÚevaluateÚwherei@B c                ó|   — t         r| at        rt        at        ay | rt        �t        at        ay t        at        ay ©N)r	   ÚUSE_NUMEXPRÚ_evaluate_numexprr   Ú_where_numexprr   r   Ú_evaluate_blockedÚ_where_blockedÚ_evaluate_standardÚ_where_standard©Úvs    ún/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/core/computation/expressions.pyÚset_use_numexprr$   2   s8   € õ Øˆõ
 Ü%ˆ	Ü‰Ù	
Ô&Ð2Ü%ˆ	Ü‰ä&ˆ	Ü ‰ó    c                óv   — t         r3t        r,| €t        j                  «       } t        j                  | «       y y y r   )r	   r   ÚneÚdetect_number_of_coresÚset_num_threads)Úns    r#   Úset_numexpr_threadsr+   F   s2   € õ �[Øˆ9Ü×)Ñ)Ó+ˆAÜ
×Ñ˜1Õð )Ðr%   c                ó6   — t         rt        d«        | ||«      S )z
    Standard evaluation.
    F)r   Ú_store_test_result©ÚopÚop_strÚleft_opÚright_ops       r#   r   r   O   s   € õ Ü˜5Ô!Ùˆg�xÓ Ð r%   c                óP   — t        | |||d«      r
t        «        t        | |||«      S )zL
    Standard evaluation, warning that an unusable numexpr was skipped.
    r   )Ú_can_use_numexprr
   r   r.   s       r#   r   r   X   s+   € ô ˜˜F G¨X°zÔBÜÔÜ˜b &¨'°8Ó<Ð<r%   c                óÒ   — |�e|j                   t        kD  rRt        «       }||fD ])  }t        |d«      sŒ||j                  j
                  hz  }Œ+ t        |«      rt        |   |k\  ryy)z2return left_op boolean if we WILL be using numexprÚdtypeTF)ÚsizeÚ_MIN_ELEMENTSÚsetÚhasattrr6   ÚnameÚlenÚ_ALLOWED_DTYPES)r/   r0   r1   r2   Údtype_checkÚdtypesÚos          r#   r4   r4   a   sh   € àÐà�<‰<œ-Ò'ä"›uˆFØ˜xÐ(ò -�ä˜1˜gÕ&Ø˜qŸw™wŸ|™|˜nÑ,‘Fð-ô �v”;¤/°+Ñ">À&Ò"HØàr%   c                óò   — t        | t        j                  «      r\t        j                  | j                  j                  «      }|j
                  | j                  j
                  ur| j                  |«      } | S )zé
    View a numexpr result with numpy's canonical dtype for its itemsize/kind.

    numexpr may return e.g. ``longlong`` where numpy's int64 is ``long``; the
    two compare equal but have different ``dtype.type``, see GH#17945.
    )Ú
isinstanceÚnpÚndarrayr6   ÚstrÚtypeÚview)ÚresultÚ	canonicals     r#   Únormalize_numexpr_resultrJ   t   sS   € ô �&œ"Ÿ*™*Ô%Ü—H‘H˜VŸ\™\×-Ñ-Ó.ˆ	à�>‰> §¡×!2Ñ!2Ñ2Ø—[‘[ Ó+ˆFØ€Mr%   c                óˆ  — d }t        | |||d«      re| j                  j                  d«      j                  d«      }|r||}}|}|}	 t	        j
                  d|› d�||dœd¬«      }t        |«      }|r||}}t        rt        |d u«       |€t        | |||«      }|S # t        $ r Y Œ6t        $ r t        |||«      rn‚ Y ŒOw xY w)	Nr   Ú_Úrzleft_value z right_value)Ú
left_valueÚright_valueÚsafe©Ú
local_dictÚcasting)r4   Ú__name__ÚstripÚ
startswithr'   r   rJ   Ú	TypeErrorÚNotImplementedErrorÚ_bool_arith_fallbackr   r-   r   )r/   r0   r1   r2   rH   Úis_reversedrN   rO   s           r#   r   r   ƒ   sï   € Ø€Fä˜˜F G¨X°zÔBØ—k‘k×'Ñ'¨Ó,×7Ñ7¸Ó<ˆÙà (¨'�XˆGàˆ
Øˆð	Ü—[‘[Ø˜f˜X \Ð2Ø*4À[ÑQØôˆFô
 .¨fÓ5ˆFñ à (¨'�XˆGåÜ˜6¨Ð-Ô.à€~Ü# B¨°¸ÓBˆà€Møô) ò 	ñ Ü"ò 	Ü# F¨G°XÔ>Øàñ ð	ús   Á*B Â	CÂ'CÃ Cú+Ú*ú-ú/z**z==z!=z<=ú<z>=ú>ú&ú|ú^c                ó0   — t        j                  | ||«      S r   )rC   r   ©Úcondr1   r2   s      r#   r    r    Ñ   s   € ä�8‰8�D˜' 8Ó,Ð,r%   c                óN   — t        d d||d«      r
t        «        t        | ||«      S )Nr   )r4   r
   r    re   s      r#   r   r   Ö   s'   € Ü˜˜g w°¸'ÔBÜÔÜ˜4 ¨(Ó3Ð3r%   c                ó”   — d }t        d d||d«      r't        j                  d| ||dœd¬«      }t        |«      }|€t	        | ||«      }|S )Nr   z#where(cond_value, a_value, b_value))Ú
cond_valueÚa_valueÚb_valuerP   rQ   )r4   r'   r   rJ   r    )rf   r1   r2   rH   s       r#   r   r   Ü   sY   € à€Fä˜˜g w°¸'ÔBÜ—‘Ø1Ø&*°wÈ8ÑTØô
ˆô
 *¨&Ó1ˆà€~Ü   w°Ó9ˆà€Mr%   ÚcomputeÚuse_numexprc                óˆ   — 	 | j                   t        k(  S # t        $ r# t        | t        t        j
                  f«      cY S w xY wr   )r6   r   ÚAttributeErrorrB   rC   Úbool_)Úxs    r#   Ú_has_bool_dtyperr   ò   s:   € ð/Ø�w‰wœ$‰ÐøÜò /Ü˜!œd¤B§H¡HÐ-Ó.Ò.ð/ús   ‚ •)AÁ A)r[   r\   r]   c                óœ   — t        |«      rAt        |«      r6| t        v r.t        j                  d| ›dt        |    ›d�t	        «       ¬«       yy)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)rr   Ú_BOOL_OP_UNSUPPORTEDÚwarningsÚwarnr   )r0   r1   r2   s      r#   rY   rY   ü   sX   € ô �wÔ¤O°HÔ$=ØÔ)Ñ)Ü�M‰MØ9¸&¸ð Dä+¨FÑ3Ð6°iðAô ,Ó-õ	ð Ør%   c                óT   — 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   rm   r0   s        r#   r   r     s9   € ô ˜RÑ €FØÐÙä˜R ¨°(Ó;Ð;Ü˜b &¨'°8Ó<Ð<r%   c                óJ   — 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    )rf   r1   r2   rm   s       r#   r   r   "  s1   € ô ÐÐÐÙÜ�d˜G XÓ.Ð.ä˜t W¨hÓ7Ð7r%   c                ó   — | a g ay)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_moder|   5  s   € ð €JØ�Lr%   c                ó4   — | rt         j                  | «       y y r   )r   Úappend)Úused_numexprs    r#   r-   r-   A  s   € ÙÜ×Ñ˜LÕ)ð r%   c                 ó   — t         } g a | S )z1
    Get test result and reset test_results.
    )r   )Úress    r#   Úget_test_resultr‚   F  s   € ô
 €CØ€LØ€Jr%   )T)r"   r   ÚreturnÚNoner   )rƒ   r„   )rƒ   r   )rm   r   )r   r   rƒ   r„   )rƒ   r   )NÚ__doc__Ú
__future__r   ÚoperatorÚtypingr   rv   ÚnumpyrC   Úpandas._config.configr   ÚconfigÚpandas.util._exceptionsr   Úpandas.corer   Úpandas.core.computation.checkr   r	   r
   Únumexprr'   Úpandas._typingr   r   Ú__annotations__r   r   r   r   r=   r8   r$   r+   r   r   r4   rJ   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Úrdivmodry   r    r   r   rr   ru   rY   r   r   r|   r-   r‚   © r%   r#   ú<module>r®      s~  ðòõ #ã Ý  Û ã å :å 4å !÷ñ ñ ÛáÝ'à€
ˆKÓ Ø€ˆjÓ Ø€Ø!€	ˆ?Ó !Ø€ˆÓ ò AÚ)ñ€ð €ô!ô(ò!ò=óò&ò'ðT!Ø‡L�L�#ð!à‡N�N�Cð!ð ‡L�L�#ð!ð ‡N�N�Cð	!ð
 ‡L�L�#ð!ð ‡N�N�Cð!ð ×Ñ�cð!ð ×Ñ˜ð!ð ×Ñ�tð!ð ×Ñ˜ð!ð ‡L�L�$ð!ð  ‡N�N�Dð!!ð" ‡L�L�$ð#!ð$ ‡N�N�Dð%!ð& ‡K�K�ð'!ð( ‡K�K�ð)!ð* ‡K�K�ð+!ð, ‡K�K�Ø‡K�K�Ø‡K�K�Ø‡M�M�3Ø‡O�O�SØ‡L�L�#Ø‡N�N�CØ‡L�L�#Ø‡N�N�CØ
ˆDØ×Ñ�tñA!€òH-ò
4òñ& ��yÑ! -Ñ0Ô 1ò/ð ! s°Ñ5Ð óô$=ô(8ô&	ó*ô
r%   