
    \ht                        S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  \" S5      r
\" S5      rSS jrSS	 jrSS
 jr      SS jrSS jrSS jrSS jrSS jrSS jr      SS jrS r\S.   SS jjrg)z%Generic SymPy-Independent Strategies     )annotations)CallableMapping)TypeVarstdout_S_Tc                    U $ N xs    M/var/www/auris/envauris/lib/python3.13/site-packages/sympy/strategies/core.pyidentityr          H    c                   ^  SU 4S jjnU$ )z/Apply a rule repeatedly until it has no effect c                D   > T" U 5      U p!X:w  a  T" U5      Up!X:w  a  M  U$ r   r   )exprnewoldrules      r   exhaustive_rlexhaust.<locals>.exhaustive_rl   s*    :tSjCy# j
r   r   r
   returnr
   r   )r   r   s   ` r   exhaustr      s    
 r   c                    ^ ^ 0 mSUU 4S jjnU$ )zMemoized 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                8   > U T;   a  TU    $ T" U 5      nUTU '   U$ r   r   )r   resultcacher   s     r   memoized_rlmemoize.<locals>.memoized_rl%   s+    5=;$ZF E$KMr   r   r	   r   r
   r   )r   r#   r"   s   ` @r   memoizer&      s     E  r   c                   ^ ^ SU U4S jjnU$ )z%Only apply rule if condition is true c                2   > T" U 5      (       a  T" U 5      $ U $ r   r   )r   condr   s    r   conditioned_rl!condition.<locals>.conditioned_rl3   s    :::r   r   r   )r)   r   r*   s   `` r   	conditionr,   /   s      r   c                    ^  SU 4S jjnU$ )zI
Compose a sequence of rules so that they apply to the expr sequentially
c                *   > T H  nU" U 5      n M     U $ r   r   )r   r   ruless     r   chain_rlchain.<locals>.chain_rl>   s    D:D r   r   r   )r/   r0   s   ` r   chainr2   :   s     Or   Nc                *   ^ ^ Tc  [         mUU 4S jnU$ )z>Print out before and after expressions each time rule is used c                    > U S   nT" U 0 UD6nX2:w  a8  TR                  STR                  -  5        TR                  SU< SU< S35        U$ )Nr   z	Rule: %s
zIn:   z
Out:  z

)write__name__)argskwargsr   r!   filer   s       r   debug_rldebug.<locals>.debug_rlJ   sK    Awt&v&>JJ|dmm34JJ4@Ar   r   )r   r9   r:   s   `` r   debugr<   E   s    | Or   c                   ^  SU 4S jjnU$ )z*Return original expr if rule returns None c                "   > T" U 5      nUc  U $ U$ r   r   )r   r!   r   s     r   null_safe_rlnull_safe.<locals>.null_safe_rlV   s    d>Kr   r   r   )r   r?   s   ` r   	null_saferA   T   s    
 r   c                   ^ ^ SUU 4S jjnU$ )z.Return original expr if rule raises exception c                2   >  T" U 5      $ ! T a    U s $ f = fr   r   )r   	exceptionr   s    r   try_rltryit.<locals>.try_rl`   s&    	: 	K	s    r   r   )r   rD   rE   s   `` r   tryitrG   ^   s     
 Mr   c                    ^  SU 4S jjnU$ )z2Try each of the rules until one works. Then stop. c                <   > T H  nU" U 5      nX :w  d  M  Us  $    U $ r   r   )r   rlr!   r/   s      r   	do_one_rldo_one.<locals>.do_one_rlj   s'    BXF~  r   r   r   )r/   rK   s   ` r   do_onerM   h   s     r   c                   ^ ^ SU U4S jjnU$ )z@Select a rule based on the result of key called on the function c                L   > TR                  T" U 5      [        5      nU" U 5      $ r   )getr   )r   rJ   keyruledicts     r   	switch_rlswitch.<locals>.switch_rlx   s     \\#d)X.$xr   )r   r	   r   r	   r   )rQ   rR   rS   s   `` r   switchrU   s   s    
  r   c                    U $ r   r   r   s    r   	_identityrW      r   r   )	objectivec                   ^ ^ SU U4S jjnU$ )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                N   > [        T Vs/ s H
  o" U 5      PM     snTS9$ s  snf )N)rQ   )min)r   r   rX   r/   s     r   minruleminimize.<locals>.minrule   s&    5154DJ51yAA1s   "r%   r   )rX   r/   r\   s   `` r   minimizer^      s    "B BNr   )r   r
   r   r
   )r   Callable[[_T], _T]r   r_   )r   Callable[[_S], _T]r   r`   )r)   zCallable[[_T], bool]r   r_   r   r_   )r/   r_   r   r_   r   )r   zCallable[[_T], _T | None]r   r_   )rQ   r`   rR   zMapping[_T, Callable[[_S], _S]]r   zCallable[[_S], _S])r/   r`   r   r`   )__doc__
__future__r   collections.abcr   r   typingr   sysr   r	   r
   r   r   r&   r,   r2   r<   rA   rG   rM   rU   rW   r^   r   r   r   <module>rf      s    , " -   T]T]*
&8	-   r   