§
    PŠtjt  ã                  óÎ   — 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dS ),z& Generic SymPy-Independent Strategies é    )Úannotations)ÚCallableÚMapping)ÚTypeVar©ÚstdoutÚ_SÚ_TÚxÚreturnc                ó   — | S ©N© ©r   s    úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/strategies/core.pyÚidentityr      ó   € Ø€Hó    ÚruleúCallable[[_T], _T]c                ó   ‡ — dˆ fd„}|S )z0 Apply a rule repeatedly until it has no effect Úexprr
   r   c                óT   •—  ‰| ¦  «        | }}||k    r ‰|¦  «        |}}||k    °|S r   r   )r   ÚnewÚoldr   s      €r   Úexhaustive_rlzexhaust.<locals>.exhaustive_rl   s>   ø€ Ø�4˜‘:”:˜tˆSˆØ�SŠjˆjØ�t˜C‘y”y #�ˆCð �SŠjˆjàˆ
r   ©r   r
   r   r
   r   )r   r   s   ` r   Úexhaustr      s)   ø€ ðð ð ð ð ð ð
 Ðr   úCallable[[_S], _T]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.
    r   r	   r   r
   c                ó@   •— | ‰v r‰|          S  ‰| ¦  «        }|‰| <   |S r   r   )r   ÚresultÚcacher   s     €€r   Úmemoized_rlzmemoize.<locals>.memoized_rl%   s1   ø€ Ø�5ˆ=ˆ=Ø˜”;Ðà�T˜$‘Z”ZˆFØ ˆE�$‰KØˆMr   ©r   r	   r   r
   r   )r   r$   r#   s   ` @r   Úmemoizer&      s6   øø€ ð €Eðð ð ð ð ð ð ð Ðr   ÚcondúCallable[[_T], bool]c                ó   ‡ ‡— dˆ ˆfd„}|S )z& Only apply rule if condition is true r   r
   r   c                ó4   •—  ‰| ¦  «        r ‰| ¦  «        S | S r   r   )r   r'   r   s    €€r   Úconditioned_rlz!condition.<locals>.conditioned_rl3   s&   ø€ Øˆ4�‰:Œ:ð 	Ø�4˜‘:”:ÐØˆr   r   r   )r'   r   r+   s   `` r   Ú	conditionr,   /   s/   øø€ ðð ð ð ð ð ð ð Ðr   Úrulesc                 ó   ‡ — dˆ fd„}|S )zQ
    Compose a sequence of rules so that they apply to the expr sequentially
    r   r
   r   c                ó(   •— ‰D ]} || ¦  «        } Œ| S r   r   )r   r   r-   s     €r   Úchain_rlzchain.<locals>.chain_rl>   s&   ø€ Øð 	ð 	ˆDØ�4˜‘:”:ˆDˆDØˆr   r   r   )r-   r0   s   ` r   Úchainr1   :   s(   ø€ ðð ð ð ð ð ð €Or   Nc                ó(   ‡ ‡— ‰€t           Šˆˆ fd„}|S )z? Print out before and after expressions each time rule is used Nc                 ó¦   •— | d         } ‰| i |¤Ž}||k    r9‰                      d‰j        z  ¦  «         ‰                      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   sh   ø€ Ø�AŒwˆØ��tÐ&˜vÐ&Ð&ˆØ�TŠ>ˆ>Ø�JŠJ�| d¤mÑ3Ñ4Ô4Ð4Ø�JŠJˆJ°4°4°4¸¸¸Ð@ÑAÔAÐAØˆr   r   )r   r8   r9   s   `` r   Údebugr:   E   s3   øø€ à€|Ýˆðð ð ð ð ð ð €Or   úCallable[[_T], _T | None]c                ó   ‡ — dˆ fd„}|S )z+ Return original expr if rule returns None r   r
   r   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 r   r
   r   c                ó6   •— 	  ‰| ¦  «        S # ‰$ r | cY S w xY wr   r   )r   Ú	exceptionr   s    €€r   Útry_rlztryit.<locals>.try_rl`   s:   ø€ ð	Ø�4˜‘:”:ÐøØð 	ð 	ð 	ØˆKˆKˆKð	øøøs   ƒ
 Ž—r   r   )r   rB   rC   s   `` r   ÚtryitrD   ^   s.   øø€ ðð ð ð ð ð ð ð
 €Mr   c                 ó   ‡ — dˆ fd„}|S )z3 Try each of the rules until one works. Then stop. r   r
   r   c                ó<   •— ‰D ]} || ¦  «        }|| k    r|c S Œ| S r   r   )r   Úrlr"   r-   s      €r   Ú	do_one_rlzdo_one.<locals>.do_one_rlj   s;   ø€ Øð 	ð 	ˆBØ�R˜‘X”XˆFØ˜Š~ˆ~Ø���ð àˆr   r   r   )r-   rH   s   ` r   Údo_onerI   h   s)   ø€ ðð ð ð ð ð ð Ðr   ÚkeyÚruledictúMapping[_T, Callable[[_S], _S]]úCallable[[_S], _S]c                ó   ‡ ‡— dˆ ˆfd„}|S )zA Select a rule based on the result of key called on the function r   r	   r   c                ób   •— ‰                       ‰| ¦  «        t          ¦  «        } || ¦  «        S r   )Úgetr   )r   rG   rJ   rK   s     €€r   Ú	switch_rlzswitch.<locals>.switch_rlx   s+   ø€ Ø�\Š\˜#˜#˜d™)œ)¥XÑ.Ô.ˆØˆr�$‰xŒxˆr   )r   r	   r   r	   r   )rJ   rK   rQ   s   `` r   ÚswitchrR   s   s/   øø€ ð
ð ð ð ð ð ð ð Ðr   c                ó   — | S r   r   r   s    r   Ú	_identityrT   €   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
    r   r	   r   r
   c                ó@   •‡ — t          ˆ fd„‰D ¦   «         ‰¬¦  «        S )Nc                ó&   •— g | ]} |‰¦  «        ‘ŒS r   r   )Ú.0r   r   s     €r   ú
<listcomp>z-minimize.<locals>.minrule.<locals>.<listcomp>–   s!   ø€ Ð1Ð1Ð1 4�D�D˜‘J”JÐ1Ð1Ð1r   )rJ   )Úmin)r   rU   r-   s   `€€r   Úminrulezminimize.<locals>.minrule•   s,   øø€ ÝÐ1Ð1Ð1Ð1¨5Ð1Ñ1Ô1°yÐAÑAÔAÐAr   r%   r   )rU   r-   r\   s   `` r   Úminimizer]   „   s3   øø€ ð"Bð Bð Bð Bð Bð Bð Bà€Nr   )r   r
   r   r
   )r   r   r   r   )r   r   r   r   )r'   r(   r   r   r   r   )r-   r   r   r   r   )r   r;   r   r   )rJ   r   rK   rL   r   rM   )r-   r   r   r   )Ú__doc__Ú
__future__r   Úcollections.abcr   r   Útypingr   Úsysr   r	   r
   r   r   r&   r,   r1   r:   r?   rD   rI   rR   rT   r]   r   r   r   ú<module>rc      sy  ðØ ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð €WˆT�]„]€Ø€WˆT�]„]€ðð ð ð ðð ð ð ðð ð ð ð*ð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð ð ð r   