Ë
    7^(ht  ã                  óÞ   — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	  ed«      Z
 ed«      Zdd„Zdd	„Zdd
„Z	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	 	 	 	 	 	 dd„Zd„ Zedœ	 	 	 dd„Zy)z& Generic SymPy-Independent Strategies é    )Úannotations)ÚCallableÚMapping)ÚTypeVar©ÚstdoutÚ_SÚ_Tc                ó   — | S ©N© ©Úxs    úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/strategies/core.pyÚidentityr      ó   € Ø€Hó    c                ó   ‡ — dˆ fd„}|S )z0 Apply a rule repeatedly until it has no effect c                óF   •—  ‰| «      | }}||k7  r ‰|«      |}}||k7  rŒ|S r   r   )ÚexprÚnewÚoldÚrules      €r   Úexhaustive_rlzexhaust.<locals>.exhaustive_rl   s2   ø€ Ù˜“:˜tˆSˆØ�SŠjÙ˜C“y #�ˆCð �S‹jàˆ
r   ©r   r
   Úreturnr
   r   )r   r   s   ` r   Úexhaustr      s   ø€ õð
 Ðr   c                ó   ‡ ‡— i Šdˆˆ fd„}|S )zÇMemoized version of a rule

    Notes
    =====

    This cache can grow infinitely, so it is not recommended to use this
    than ``functools.lru_cache`` unless you need very heavy computation.
    c                ó4   •— | ‰v r‰|    S  ‰| «      }|‰| <   |S r   r   )r   ÚresultÚcacher   s     €€r   Úmemoized_rlzmemoize.<locals>.memoized_rl%   s+   ø€ Ø�5‰=Ø˜‘;Ðá˜$“ZˆFØ ˆE�$‰KØˆMr   ©r   r	   r   r
   r   )r   r"   r!   s   ` @r   Úmemoizer$      s   ù€ ð €Eöð Ðr   c                ó   ‡ ‡— dˆ ˆfd„}|S )z& Only apply rule if condition is true c                ó(   •—  ‰| «      r ‰| «      S | S r   r   )r   Úcondr   s    €€r   Úconditioned_rlz!condition.<locals>.conditioned_rl3   s   ø€ Ù�Œ:Ù˜“:ÐØˆr   r   r   )r'   r   r(   s   `` r   Ú	conditionr)   /   s   ù€ öð Ðr   c                 ó   ‡ — dˆ fd„}|S )zQ
    Compose a sequence of rules so that they apply to the expr sequentially
    c                ó&   •— ‰D ]
  } || «      } Œ | S r   r   )r   r   Úruless     €r   Úchain_rlzchain.<locals>.chain_rl>   s    ø€ Øò 	ˆDÙ˜“:‰Dð	àˆr   r   r   )r,   r-   s   ` r   Úchainr.   :   s   ø€ õð €Or   Nc                ó&   ‡ ‡— ‰€t         Šˆˆ fd„}|S )z? Print out before and after expressions each time rule is used c                 ó˜   •— | d   } ‰| i |¤Ž}||k7  r6‰j                  d‰j                  z  «       ‰j                  d|›d|›d�«       |S )Nr   z	Rule: %s
zIn:   z
Out:  z

)ÚwriteÚ__name__)ÚargsÚkwargsr   r    Úfiler   s       €€r   Údebug_rlzdebug.<locals>.debug_rlJ   sM   ø€ Ø�A‰wˆÙ�tÐ&˜vÑ&ˆØ�TŠ>Ø�J‰J�| d§m¡mÑ3Ô4Ø�JŠJ²4ºÐ@ÔAØˆr   r   )r   r5   r6   s   `` r   Údebugr7   E   s   ù€ à€|Üˆõð €Or   c                ó   ‡ — dˆ fd„}|S )z+ Return original expr if rule returns None c                ó    •—  ‰| «      }|€| S |S r   r   )r   r    r   s     €r   Únull_safe_rlznull_safe.<locals>.null_safe_rlV   s   ø€ Ù�d“ˆØˆ>ØˆKØˆr   r   r   )r   r:   s   ` r   Ú	null_safer;   T   s   ø€ õð
 Ðr   c                ó   ‡ ‡— dˆˆ fd„}|S )z/ Return original expr if rule raises exception c                ó0   •— 	  ‰| «      S # ‰$ r | cY S w xY wr   r   )r   Ú	exceptionr   s    €€r   Útry_rlztryit.<locals>.try_rl`   s&   ø€ ð	Ù˜“:ÐøØò 	ØŠKð	ús   ƒ ‹”r   r   )r   r>   r?   s   `` r   Útryitr@   ^   s   ù€ öð
 €Mr   c                 ó   ‡ — dˆ fd„}|S )z3 Try each of the rules until one works. Then stop. c                ó8   •— ‰D ]  } || «      }|| k7  sŒ|c S  | S r   r   )r   Úrlr    r,   s      €r   Ú	do_one_rlzdo_one.<locals>.do_one_rlj   s.   ø€ Øò 	ˆBÙ˜“XˆFØ˜‹~Ø’ð	ð ˆr   r   r   )r,   rD   s   ` r   Údo_onerE   h   s   ø€ õð Ðr   c                ó   ‡ ‡— dˆ ˆfd„}|S )zA Select a rule based on the result of key called on the function c                óL   •— ‰j                   ‰| «      t        «      } || «      S r   )Úgetr   )r   rC   ÚkeyÚruledicts     €€r   Ú	switch_rlzswitch.<locals>.switch_rlx   s    ø€ Ø�\‰\™#˜d›)¤XÓ.ˆÙ�$‹xˆr   )r   r	   r   r	   r   )rI   rJ   rK   s   `` r   ÚswitchrL   s   s   ù€ ö
ð Ðr   c                ó   — | S r   r   r   s    r   Ú	_identityrN   €   r   r   )Ú	objectivec                ó   ‡ ‡— dˆ ˆfd„}|S )a-   Select result of rules that minimizes objective

    >>> from sympy.strategies import minimize
    >>> inc = lambda x: x + 1
    >>> dec = lambda x: x - 1
    >>> rl = minimize(inc, dec)
    >>> rl(4)
    3

    >>> rl = minimize(inc, dec, objective=lambda x: -x)  # maximize
    >>> rl(4)
    5
    c                óP   •— t        ‰D �cg c]
  } || «      ‘Œ c}‰¬«      S c c}w )N)rI   )Úmin)r   r   rO   r,   s     €€r   Úminrulezminimize.<locals>.minrule•   s"   ø€ Ü¨5Ö1 4‘D˜•JÒ1°yÔAÐAùÒ1s   ‹#r#   r   )rO   r,   rS   s   `` r   ÚminimizerT   „   s   ù€ ö"Bà€Nr   )r   r
   r   r
   )r   úCallable[[_T], _T]r   rU   )r   úCallable[[_S], _T]r   rV   )r'   zCallable[[_T], bool]r   rU   r   rU   )r,   rU   r   rU   r   )r   zCallable[[_T], _T | None]r   rU   )rI   rV   rJ   zMapping[_T, Callable[[_S], _S]]r   zCallable[[_S], _S])r,   rV   r   rV   )Ú__doc__Ú
__future__r   Úcollections.abcr   r   Útypingr   Úsysr   r	   r
   r   r   r$   r)   r.   r7   r;   r@   rE   rL   rN   rT   r   r   r   ú<module>r\      s­   ðÙ ,Ý "ß -Ý Ý ñ ˆTƒ]€ÙˆTƒ]€óóóð*Ø
ðØ&8ðàóóóóóóðØ	ðà-ðð óòð ñØðð ôr   