ó
Ąž\c           @  sx   d  Z  d d l m Z m 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 d d  Z d S(
   s5    Functions to support rewriting of SymPy expressions iĸĸĸĸ(   t   print_functiont   division(   t   Expr(   t   ask(   t   subs(   t   rebuildt   unifyc           s"   t        f d  } | S(   sã   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.utilities 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  sđ   xē t   |  i  d  D] }  rW  g   D] } | j | |  ^ q/   rW q n    r| t   j |  |  r| q n  t |    } t | t  rŽ t |  } n  | Vq Wd  S(   Nt	   variables(   R   t   getR   t   xreplaceR   t
   isinstanceR   R   (   t   exprt   assumptionst   matcht   vart   expr2(   t   assumet	   conditiont   sourcet   targetR   (    s2   lib/python2.7/site-packages/sympy/unify/rewrite.pyt
   rewrite_rl.   s    ,(   t   True(   R   R   R   R   R   R   (    (   R   R   R   R   R   s2   lib/python2.7/site-packages/sympy/unify/rewrite.pyt   rewriterule
   s    $N(    (   t   __doc__t
   __future__R    R   t   sympyR   t   sympy.assumptionsR   t   sympy.strategies.toolsR   t   sympy.unify.usympyR   R   t   NoneR   (    (    (    s2   lib/python2.7/site-packages/sympy/unify/rewrite.pyt   <module>   s   