a
    SG5dU  ã                   @   sH   d dl mZ d dlmZmZmZ d dlmZ dd„ Zdd„ Z	dd	„ Z
d
S )é   )Úrl)Údo_oneÚexhaustÚswitch)Útop_downc                 K   s:   | r.t tttjgt|  ¡ Ž ¢R Ž Ž fi |¤ŽS dd„ S dS )az   Full simultaneous exact substitution.

    Examples
    ========

    >>> from sympy.strategies.tools import subs
    >>> from sympy import Basic, S
    >>> mapping = {S(1): S(4), S(4): S(1), Basic(S(5)): Basic(S(6), S(7))}
    >>> expr = Basic(S(1), Basic(S(2), S(3)), Basic(S(4), Basic(S(5))))
    >>> subs(mapping)(expr)
    Basic(4, Basic(2, 3), Basic(1, Basic(6, 7)))
    c                 S   s   | S )N© )Úxr   r   úR/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/strategies/tools.pyÚ<lambda>   ó    zsubs.<locals>.<lambda>N)r   r   Úmapr   ÚsubsÚzipÚitems)ÚdÚkwargsr   r   r	   r      s    *r   c                  O   s   t tt t| Ž ƒfi |¤ŽƒS )zÊ Strategy for canonicalization.

    Explanation
    ===========

    Apply each rule in a bottom_up fashion through the tree.
    Do each one in turn.
    Keep doing this until there is no change.
    )r   r   r   )Úrulesr   r   r   r	   Úcanon   s    
r   c                 C   s
   t t| ƒS )al   Apply rules based on the expression type

    inputs:
        ruletypes -- a dict mapping {Type: rule}

    Examples
    ========

    >>> from sympy.strategies import rm_id, typed
    >>> from sympy import Add, Mul
    >>> rm_zeros = rm_id(lambda x: x==0)
    >>> rm_ones  = rm_id(lambda x: x==1)
    >>> remove_idents = typed({Add: rm_zeros, Mul: rm_ones})
    )r   Útype)Z	ruletypesr   r   r	   Útyped#   s    r   N)Ú r   Úcorer   r   r   Útraverser   r   r   r   r   r   r   r	   Ú<module>   s
   