
    MZd                     D    d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddZ
y)	z5 Functions to support rewriting of SymPy expressions     )Expr)ask)subs)rebuildunifyNc                 $     d fd	}|S )a   Rewrite rule.

    Transform expressions that match source into expressions that match target
    treating all ``variables`` as wilds.

    Examples
    ========

    >>> from sympy.abc import w, x, y, z
    >>> from sympy.unify.rewrite import rewriterule
    >>> from sympy import default_sort_key
    >>> rl = rewriterule(x + y, x**y, [x, y])
    >>> sorted(rl(z + 3), key=default_sort_key)
    [3**z, z**3]

    Use ``condition`` to specify additional requirements.  Inputs are taken in
    the same order as is found in variables.

    >>> rl = rewriterule(x + y, x**y, [x, y], lambda x, y: x.is_integer)
    >>> list(rl(z + 3))
    [3**z]

    Use ``assume`` to specify additional requirements using new assumptions.

    >>> from sympy.assumptions import Q
    >>> rl = rewriterule(x + y, x**y, [x, y], assume=Q.integer(x))
    >>> list(rl(z + 3))
    [3**z]

    Assumptions for the local context are provided at rule runtime

    >>> list(rl(w + z, Q.integer(z)))
    [z**w]
    c           
   3   (  K   t        | i 	      D ]v  }r$ 	D cg c]  }|j                  ||       c} s)rt        j                  |      |      sG t	        |            }t        |t              rt        |      }| x y c c}w w)N)	variables)r   getr   xreplacer   
isinstancer   r   )
exprassumptionsmatchvarexpr2assume	conditionsourcetargetr
   s
        5/usr/lib/python3/dist-packages/sympy/unify/rewrite.py
rewrite_rlzrewriterule.<locals>.rewrite_rl,   s     64yA 		EyI		#s 3IJs6??5#9;GDK'E%&K		Is   BB
AB)T )r   r   r
   r   r   r   s   ````` r   rewriteruler      s    H
 
     )r   NN)__doc__sympy.core.exprr   sympy.assumptionsr   sympy.strategies.toolsr   sympy.unify.usympyr   r   r   r   r   r   <module>r!      s    ;   ! ' -/r   