Ë
    ¤ehO  ã                  ó&  — 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 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d3d4d„Zd5d6d„Zd„ Zd7d„Z d„ Z!i ejD                  d“ejF                  d“ejH                  d“ejJ                  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j`                  d“ej$                  d “ejb                  d!“ejd                  d"ejf                  d#ejh                  d$ejj                  d%ejl                  d%ejn                  d&ejp                  d&ejr                  d'ejt                  d'e;dejx                  di¥Z=d(„ Z>d)„ Z? e e
d*«      «       d+„ Z@d&d%d'd,œZAd7d-„ZBd3d8d.„ZCd3d8d/„ZDd3d4d0„ZEd9d1„ZFd:d2„ZGy);zL
Expressions
-----------

Offer fast expression evaluation through numexpr

é    )ÚannotationsN)ÚTYPE_CHECKING)Ú
get_option)Úfind_stack_level)Ú	roperator)ÚNUMEXPR_INSTALLED)Ú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        nt        at        rt
        ay t        ay ©N)r   ÚUSE_NUMEXPRÚ_evaluate_numexprÚ_evaluate_standardr   Ú_where_numexprÚ_where_standardr   ©Úvs    úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/core/computation/expressions.pyÚset_use_numexprr    -   s$   € õ Øˆõ
 &1Õ!Ô6H€IÝ*Œ^�F´�Fó    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'   :   s2   € õ �[Øˆ9Ü×)Ñ)Ó+ˆAÜ
×Ñ˜1Õð )Ðr!   c                ó6   — t         rt        d«        | ||«      S )z
    Standard evaluation.
    F)r
   Ú_store_test_result)ÚopÚop_strÚaÚbs       r   r   r   C   s   € õ Ü˜5Ô!Ùˆa�‹8€Or!   c                óÒ   — |�e|j                   t        kD  rRt        «       }||fD ])  }t        |d«      sŒ||j                  j
                  hz  }Œ+ t        |«      rt        |   |k\  ryy)z,return a boolean if we WILL be using numexprÚdtypeTF)ÚsizeÚ_MIN_ELEMENTSÚsetÚhasattrr/   ÚnameÚlenÚ_ALLOWED_DTYPES)r*   r+   r,   r-   Údtype_checkÚdtypesÚos          r   Ú_can_use_numexprr:   L   sg   € àÐà�6‰6”MÒ!ä"›uˆFØ˜�Vò -�ä˜1˜gÕ&Ø˜qŸw™wŸ|™|˜nÑ,‘Fð-ô �v”;¤/°+Ñ">À&Ò"HØàr!   c                ór  — d }t        | |||d«      rZ| j                  j                  d«      j                  d«      }|r||}}|}|}	 t	        j
                  d|› d�||dœd¬«      }|r||}}t        rt        |d u«       |€t        | |||«      }|S # t        $ r Y Œ6t        $ r t        |||«      rn‚ Y ŒOw xY w)	Nr   Ú_Úrza_value z b_value)Úa_valueÚb_valueÚsafe©Ú
local_dictÚcasting)r:   Ú__name__ÚstripÚ
startswithr#   r   Ú	TypeErrorÚNotImplementedErrorÚ_bool_arith_fallbackr
   r)   r   )r*   r+   r,   r-   ÚresultÚis_reversedr>   r?   s           r   r   r   _   sã   € Ø€Fä˜˜F A q¨*Ô5Ø—k‘k×'Ñ'¨Ó,×7Ñ7¸Ó<ˆÙà�aˆqˆAàˆØˆð	Ü—[‘[Ø˜6˜( (Ð+Ø'.¸7ÑCØôˆFñ à�aˆqˆAåÜ˜6¨Ð-Ô.à€~Ü# B¨°°1Ó5ˆà€Møô) ò 	ñ Ü"ò 	Ü# F¨A¨qÔ1Øàñ ð	ús   ÁB Â	B6ÂB6Â5B6ú+Ú*ú-ú/z**z==z!=z<=ú<z>=ú>ú&ú|ú^c                ó0   — t        j                  | ||«      S r   )Únpr   )Úcondr,   r-   s      r   r   r   ¬   s   € ä�8‰8�D˜!˜QÓÐ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_valuer>   r?   r@   rA   )r:   r#   r   r   )rW   r,   r-   rJ   s       r   r   r   ±   sO   € à€Fä˜˜g q¨!¨WÔ5Ü—‘Ø1Ø&*°qÀQÑGØô
ˆð €~Ü   q¨!Ó,ˆà€Mr!   zcompute.use_numexprc                óˆ   — 	 | j                   t        k(  S # t        $ r# t        | t        t        j
                  f«      cY S w xY wr   )r/   r   ÚAttributeErrorÚ
isinstancerV   Úbool_)Úxs    r   Ú_has_bool_dtyper_   Æ   s:   € ð/Ø�w‰wœ$‰ÐøÜò /Ü˜!œd¤B§H¡HÐ-Ó.Ò.ð/ús   ‚ •)AÁ A)rL   rM   rN   c           	     óÀ   — t        |«      rSt        |«      rH| t        v r@t        j                  dt	        | «      › dt	        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)r_   Ú_BOOL_OP_UNSUPPORTEDÚwarningsÚwarnÚreprr   )r+   r,   r-   s      r   rI   rI   Ð   sb   € ô �qÔœo¨aÔ0ØÔ)Ñ)Ü�M‰MØ9¼$¸v»,¸ð HäÔ0°Ñ8Ó9Ð:¸)ðEô ,Ó-õ	ð Ør!   c                óT   — t         |    }|�|rt        | |||«      S t        | |||«      S )zô
    Evaluate and return the expression of the op on a and b.

    Parameters
    ----------
    op : the actual operand
    a : left operand
    b : right operand
    use_numexpr : bool, default True
        Whether to try to use numexpr.
    )Ú_op_str_mappingr   r   )r*   r,   r-   Úuse_numexprr+   s        r   r   r   â   s9   € ô ˜RÑ €FØÐÙä˜R ¨¨AÓ.Ð.Ü˜b &¨!¨QÓ/Ð/r!   c                óJ   — t         €J ‚|rt        | ||«      S t        | ||«      S )zý
    Evaluate the where condition cond on a and b.

    Parameters
    ----------
    cond : np.ndarray[bool]
    a : return if cond is True
    b : return if cond is False
    use_numexpr : bool, default True
        Whether to try to use numexpr.
    )r   r   )rW   r,   r-   rh   s       r   r   r   ö   s/   € ô ÐÐÐÙ!,Œ6�$˜˜1ÓÐM´/À$ÈÈ1Ó2MÐMr!   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_moderk     s   € ð €JØ�Lr!   c                ó4   — | rt         j                  | «       y y r   )r   Úappend)Úused_numexprs    r   r)   r)     s   € ÙÜ×Ñ˜LÕ)ð r!   c                 ó   — t         } g a | S )z1
    Get test result and reset test_results.
    )r   )Úress    r   Úget_test_resultrq     s   € ô
 €CØ€LØ€Jr!   )T)r   r   ÚreturnÚNoner   )rr   rs   )rr   r   )rh   r   )rn   r   rr   rs   )rr   r   )HÚ__doc__Ú
__future__r   ÚoperatorÚtypingr   rc   ÚnumpyrV   Úpandas._configr   Úpandas.util._exceptionsr   Úpandas.corer   Úpandas.core.computation.checkr   Únumexprr#   Úpandas._typingr	   r
   Ú__annotations__r   r   r   r   r6   r1   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Úrdivmodrg   r   r   r_   rb   rI   r   r   rk   r)   rq   © r!   r   ú<module>rœ      sd  ðòõ #ã Ý  Û ã å %å 4å !Ý ;áÛáÝ'à€
ˆKÓ Ø€ˆjÓ Ø€Ø!€	ˆ?Ó !Ø€ˆÓ ò AÚ)ñ€ð €ô
@ôòóò&&ðR!Ø‡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 ò
ñ$ ‘
Ð0Ó1Ô 2ò/ð ! s°Ñ5Ð óô$0ô(Nô 	ó*ô
r!   