
~9\c           @   s\  d  Z  d d l m Z d d l m Z d d l m Z m Z m Z m	 Z	 m
 Z
 d d l m Z d d l m Z d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% h Z d& d' h Z d( d) d* h Z i d+ d, 6Z i d- d- 6d. d. 6d/ d/ 6d0 d0 6d1 d1 6d2 d2 6d3 d3 6d4 d5 6d6 d6 6d7 d7 6d8 d8 6d9 d9 6d: d: 6d; d; 6d< d< 6d= d= 6d> d> 6d? d? 6d@ dA 6dB dB 6dB dC 6dD dD 6dE dE 6dF dF 6dG dG 6dH dH 6dI dJ 6dK dK 6dL dL 6Z i dM dN 6dO dP 6dM dQ 6Z dR   Z dS   Z dT e f dU     YZ dV e f dW     YZ x% e j D] Z e e dX e e  q*Wx" e D] Z e e dX e e  qOWdY   Z dZ j   Z g  e j   D]$ \ Z Z e e k re e f ^ qZ  e! e  i d[ d[ 6 Z" i dO dP 6Z# d\ e f d]     YZ$ x% e$ j D] Z e e$ dX e e  qWx" e# D] Z e e$ dX e e  q!Wd^ j   Z% g  e j   D]$ \ Z Z e e% k r|e e f ^ qXZ& e! e& i	 d_ d- 6d` d. 6da d/ 6db d0 6dc d1 6dd d2 6de d3 6df df 6d[ d[ 6 Z' dg e f dh     YZ( x% e( j D] Z e e( dX e e  qWx% e( j) D] Z e e( dX e e  qWi d8 d8 6d9 d9 6di dj 6dk dl 6dm dn 6do dp 6d< d< 6d> d> 6dq dA 6dr ds 6dt du 6dv dw 6dx dy 6dz d{ 6d| d} 6d~ d 6d d 6d d 6d d 6Z* i d d 6dO dP 6dM dQ 6Z+ d e( f d     YZ, x% e, j D] Z e e, dX e e  qWx% e, j) D] Z e e, dX e e  q$Wd e f d     YZ- d S(   sy   
Python code printers

This module contains python code printers for plain python as well as NumPy & SciPy enabled code.
i(   t   defaultdict(   t   chain(   t   St   Numbert   Symbolt   Mult   Addi   (   t
   precedence(   t   CodePrintert   andt   ast   assertt   breakt   classt   continuet   deft   delt   elift   elset   exceptt   finallyt   fort   fromt   globalt   ift   importt   int   ist   lambdat   nott   ort   passt   raiset   returnt   tryt   whilet   witht   yieldt   Nonet   exect   printt   Falset   nonlocalt   Truet   abst   Abst   acost   acosht   asint   asinht   atant   atan2t   atanht   ceilt   ceilingt   cost   cosht   erft   erfct   expt   expm1t	   factorialt   floort   gammat   hypott   lgammat   loggammat   logt   lnt   log10t   log1pt   log2t   sint   sinht   sqrtt   Sqrtt   tant   tanht   et   Exp1t   pit   Pit   Ec            sP     j  | j j } d j d   j |  d d j t   f d   | j    S(   Ns   {name}({args})t   namet   argss   , c            s     j  |   S(   N(   t   _print(   t   arg(   t   self(    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   <lambda>F   t    (   t   known_functionst	   __class__t   __name__t   formatt   _module_formatt   joint   mapRT   (   RW   t   exprt   known(    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_known_funcC   s    c         C   s    |  j  | j j } |  j |  S(   N(   t   known_constantsR[   R\   R^   (   RW   Ra   Rb   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_known_constI   s    t   AbstractPythonCodePrinterc           B   s  e  Z d  Z d Z d Z e j e  Z d, Z
 d Z e e e j   g  e j   D] \ Z Z e d e f ^ qO   Z d   e j   D Z i d d 6d d 6d d 6Z e e j d	 i  d
 d d e d e d e Z d, d  Z d   Z e d  Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d   Z' d   Z( d   Z) d   Z* d   Z+ d    Z, d!   Z- d"   Z. d#   Z/ Z0 Z1 Z2 Z3 Z4 Z5 Z6 d$   Z7 d%   Z8 d&   Z9 d'   Z: d(   Z; d)   Z< d*   Z= d+   Z> RS(-   t   _pythoncodet   Pythont   python3s       s   math.c         C   s#   i  |  ] \ } } d  | |  q S(   s   math.(    (   t   .0t   kt   v(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys
   <dictcomp>Y   s   	 R	   R   R   t   user_functionst	   precisioni   t   inlinet   fully_qualified_modulest   contractc         C   sw   t  t |   j |  t t  |  _ t |  j | p7 i  j d i    |  _	 t |  j
 | p^ i  j d i    |  _ d  S(   NRm   t   user_constants(   t   superRf   t   __init__R    t   sett   module_importst   dictt   _kft   getRZ   t   _kcRd   (   RW   t   settings(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRt   d   s    c         C   s   d | | f S(   Ns   %s = %s(    (   RW   RS   t   value(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _declare_number_constl   s    c         C   s   | j  d  } | rO t |  d k rO |  j d j | d   j | d  n  |  j d r` | S| j  d  d j  d  d j  d  d Sd  S(   Nt   .i   iRp   t   (i    t   [(   t   splitt   lenRv   R_   t   addt	   _settings(   RW   t   fqnt   registert   parts(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR^   o   s    (c         C   s   | S(   N(    (   RW   t   lines(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _format_codey   s    c         C   s   d j  |  S(   Ns   {}(   R]   (   RW   t
   codestring(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _get_statement|   s    c         C   s   d j  |  S(   Ns     # {0}(   R]   (   RW   t   text(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _get_comment   s    c         C   s^   t  |  d k r# |  j | d  Sd |  j |  |  j | | d   |  j | d  f Sd S(   s   
        This method expands a fold on binary operations.

        ``functools.reduce`` is an example of a folded operation.

        For example, the expression

        `A + B + C + D`

        is folded into

        `((A + B) + C) + D`
        i   i    s
   %s(%s, %s)iN(   R   RU   R^   t   _expand_fold_binary_op(   RW   t   opRT   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR      s    c         C   sq   t  |  d k r# |  j | d  St  |  } | d } d |  j |  |  j | |   |  j | |  f Sd S(   s   
        This method expands a reductin on binary operations.

        Notice: this is NOT the same as ``functools.reduce``.

        For example, the expression

        `A + B + C + D`

        is reduced into:

        `(A + B) + (C + D)`
        i   i    i   s
   %s(%s, %s)N(   R   RU   R^   t   _expand_reduce_binary_op(   RW   R   RT   t   Nt   Nhalf(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR      s    
c         C   sf  |  j    } d } d } d   | D } g  } xo | D]g } g  }	 xK t |  D]= }
 | | k rt |	 j | |  n |	 j |  | d 7} qN W| j |	  q5 Wi  } g  } g  } x | D] }
 x |
 D]w } | | k r t |  } | | | <n
 | | } | | 7} | | k r0| | k r=| j |  q=q | j |  q W| d 7} q W| d  } | | | f S(   NRY   i    c         S   s,   i  |  ]" } | D] } t  |  |  q q S(    (   t   min(   Rj   t   it   j(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys
   <dictcomp>   s   	 i   t   ,i(   t    _get_letter_generator_for_einsumt   ranget   appendt   next(   RW   t   subrankst   contraction_indicest   letterst   contraction_stringt   countert   dt   indicest   rank_argt   lindicesR   t   mappingt   letters_freet   letters_dumR   t   l(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _get_einsum_string   s<    


c         C   s   d S(   Ns   float('nan')(    (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_NaN   s    c         C   s   d S(   Ns   float('inf')(    (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Infinity   s    c         C   s   d S(   Ns   float('-inf')(    (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_NegativeInfinity   s    c         C   s   |  j  |  S(   N(   R   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_ComplexInfinity   s    c            s1   t  |    d j t    f d   | j    S(   Ns	   {0} % {1}c            s    j  |     S(   N(   t   parenthesize(   t   x(   t   PRECRW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX      RY   (   R   R]   R`   RT   (   RW   Ra   (    (   R   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_Mod   s    c         C   s  g  } d } x | j  D] } | j } | j } | d k rJ | j d  n  | j d  | j |  j |   | j d  | j d  | j |  j |   | j d  | d 7} q W| d  } | d d k r | d	  } | j d  n | j d
  d j |  S(   Ni    R   t   )s    if s    else i   iR+   is    else None)RY   (   RT   Ra   t   condR   RU   R_   (   RW   Ra   t   resultR   RV   RN   t   c(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Piecewise   s(    		

c         C   s   i d d 6d d 6d d 6d d 6d	 d
 6d d 6} | j  | k r |  j | j  } |  j | j  } d j d | j  d | d |  St t |   j |  S(   s.   Relational printer for Equality and Unequalityt   equals   ==t	   not_equals   !=t   lesst   <t
   less_equals   <=t   greatert   >t   greater_equals   >=s   ({lhs} {op} {rhs})R   t   lhst   rhs(   t   rel_opRU   R   R   R]   Rs   Rf   t   _print_Relational(   RW   Ra   R   R   R   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR      s    
c         C   s&   d d l  m } |  j | j |   S(   Ni(   t	   Piecewise(   t$   sympy.functions.elementary.piecewiseR   RU   t   rewrite(   RW   Ra   R   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_ITE  s    c            sD     f d   | j  D } d j d   j | j  d d j |   S(   Nc      	   3   sQ   |  ]G \ } } } d  j  d   j |  d   j |  d   j |   Vq d S(   s   for {i} in range({a}, {b}+1)R   t   at   bN(   R]   RU   (   Rj   R   R   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>  s   s"   (builtins.sum({function} {loops}))t   functiont   loopst    (   t   limitsR]   RU   R   R_   (   RW   Ra   R   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_Sum  s
    	c         C   s   d S(   Nt   1j(    (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_ImaginaryUnit  s    c         C   s>   | j  j } |  j j | |  } d | |  j | j    f S(   Ns   %s(%s)(   R[   R\   RZ   Ry   RU   t   tolist(   RW   Ra   RS   t   func(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_MatrixBase  s    c         C   s   |  j  |  S(   N(   R   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX   +  RY   c         C   s0   d j  g  | j d  D] } |  j | ^ q  S(   Ns   
(   R_   R   t   tab(   RW   R   t   line(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _indent_codestring-  s    c      	      s   d j  t   f d   | j   } d j d   j | j  d d j  g  | j D] }   j | j  ^ qO  d   j |   S(   Ns   
c            s     j  |   S(   N(   RU   (   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX   1  RY   s    def {name}({parameters}):
{body}RS   t
   parameterss   , t   body(	   R_   R`   R   R]   RU   RS   R   t   symbolR   (   RW   t   fdR   t   var(    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_FunctionDefinition0  s
    $	1c            sO   d j  t   f d   | j   } d j d   j | j  d   j |   S(   Ns   
c            s     j  |   S(   N(   RU   (   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX   9  RY   s   while {cond}:
{body}R   R   (   R_   R`   R   R]   RU   t	   conditionR   (   RW   t   whlR   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_While8  s    $	c         C   s,   d |  j  | j j  |  j  | j j  f S(   Ns   %s = %s(   RU   t   variableR   R|   (   RW   t   decl(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Declaration?  s    c         C   s   | j  \ } d |  j |  S(   Ns	   return %s(   RT   RU   (   RW   t   retRV   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_ReturnE  s    c            s   d j  t   f d   | j   } | j d  k rT d j   j | j  |  } n  | j d  k r | d   j | j  7} n  d | S(   Ns   , c            s     j  |   S(   N(   RU   (   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX   J  RY   s   {0} % ({1})s	   , file=%ss	   print(%s)(   R_   R`   t
   print_argst   format_stringR&   R]   RU   t   file(   RW   t   prntR   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_PrintI  s    $c         C   sX   t  | j  d k r" |  j d  St  | j  d k rD |  j d  S|  j | j  Sd  S(   Nt   stdouts
   sys.stdoutt   stderrs
   sys.stderr(   t   strRS   R^   RU   (   RW   t   strm(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_StreamR  s
    c         C   s   d S(   NR&   (    (   RW   RV   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_NoneTokenZ  s    N(?   R\   t
   __module__t   printmethodt   languaget   standardt   _kw_py2and3t   uniont   _kw_only_py3t   reserved_wordsR&   t   modulesR   Rw   R   t   _known_functionst   itemst   _known_functions_mathRk   Rl   Rx   t   _known_constants_mathRz   t
   _operatorsR   t   _default_settingsR+   R)   Rt   R}   R^   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   _print_SparseMatrixt   _print_MutableSparseMatrixt   _print_ImmutableSparseMatrixt   _print_Matrixt   _print_DenseMatrixt   _print_MutableDenseMatrixt   _print_ImmutableMatrixt   _print_ImmutableDenseMatrixR   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRf   N   s^   	5			
						#											%								t   PythonCodePrinterc           B   s   e  Z d    Z d   Z RS(   c         C   s/   d j  d |  j d  d |  j | j d   S(   Ns"   (0.0 if {e} == 0 else {f}(1, {e}))t   fs   math.copysignRN   i    (   R]   R^   RU   RT   (   RW   RN   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_sign`  s    	c         C   s.   t  |  } |  j d |  j | j d |  S(   NR   i    (   R   R   R   RT   (   RW   Ra   R   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_Notd  s    (   R\   R   R  R  (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR  ^  s   	s	   _print_%sc         K   s   t  |  j |   S(   s   Converts an expr to a string of Python code

    Parameters
    ==========

    expr : Expr
        A SymPy expression.
    fully_qualified_modules : bool
        Whether or not to write out full module names of functions
        (``math.sin`` vs. ``sin``). default: ``True``.

    Examples
    ========

    >>> from sympy import tan, Symbol
    >>> from sympy.printing.pycode import pycode
    >>> pycode(tan(Symbol('x')) + 1)
    'math.tan(x) + 1'

    (   R  t   doprint(   Ra   R{   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   pycodep  s    s
   log1p log2t   signt   MpmathPrinterc           B   s   e  Z d  Z d Z e e e j   g  e j   D] \ Z	 Z
 e	 d e
 f ^ q.   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(	   sH   
    Lambda printer for mpmath which maintains precision for floats
    t   _mpmathcodes   mpmath.c         C   s=   t  t t t | j    } d j d |  j d  d |  S(   Ns   {func}({args})R   s
   mpmath.mpfRT   (   R   t   tupleR`   t   intt   _mpf_R]   R^   (   RW   RN   RT   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Float  s    c         C   s"   d j  |  j d  | j | j  S(   Ns   {0}({1})/{0}({2})s
   mpmath.mpf(   R]   R^   t   pt   q(   RW   RN   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Rational  s    c         C   sH   d j  |  j d  |  j | j d  |  j | j d  |  j d   S(   Ns   {0}({1}, {2}, {3})s   mpmath.gammainci    i   s
   mpmath.inf(   R]   R^   RU   RT   (   RW   RN   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_uppergamma  s
    c         C   s<   d j  |  j d  |  j | j d  |  j | j d   S(   Ns   {0}({1}, 0, {2})s   mpmath.gammainci    i   (   R]   R^   RU   RT   (   RW   RN   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_lowergamma  s    c         C   s)   d j  |  j d  |  j | j d   S(   Ns   {0}({1})/{0}(2)s
   mpmath.logi    (   R]   R^   RU   RT   (   RW   RN   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_log2  s    c         C   s)   d j  |  j d  |  j | j d   S(   Ns
   {0}({1}+1)s
   mpmath.logi    (   R]   R^   RU   RT   (   RW   RN   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_log1p  s    (   R\   R   t   __doc__R   Rw   R   R   R   t   _known_functions_mpmathRk   Rl   Rx   R  R  R  R  R  R  (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR    s   	5	
				s!   erf erfc factorial gamma loggammat   arccost   arccosht   arcsint   arcsinht   arctant   arctan2t   arctanht   exp2t   NumPyPrinterc           B   sI  e  Z d  Z d Z e e e j j   g  e	 j   D] \ Z
 Z e
 d e f ^ q1   Z d   e j   D Z d   Z d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% RS(   sa   
    Numpy printer which handles vectorized piecewise functions,
    logical operators, etc.
    t
   _numpycodes   numpy.c         C   s#   i  |  ] \ } } d  | |  q S(   s   numpy.(    (   Rj   Rk   Rl   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys
   <dictcomp>  s   	 c            s,   d } d j  | j   f d   | D   S(   s+   General sequence printer: converts to tuples   , s   ({},)c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   t   item(   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>  s    (   R]   R_   (   RW   t   seqt	   delimiter(    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_seq  s    c            s   | j    d t d  k	 rc | j    d | j    d g } d j d j   f d   | D   Sd j d j   f d   | j D   S(   s   Matrix multiplication printeri    i   s   ({0})s   ).dot(c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>  s    c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>  s    (   t   as_coeff_matricesR   R]   R_   RT   (   RW   Ra   t	   expr_list(    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_MatMul  s    !&c         C   s<   d j  |  j d  |  j | j d  |  j | j d   S(   s   Matrix power printers   {0}({1}, {2})s   numpy.linalg.matrix_poweri    i   (   R]   R^   RU   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_MatPow  s    c         C   s)   d j  |  j d  |  j | j d   S(   s   Matrix inverse printers   {0}({1})s   numpy.linalg.invi    (   R]   R^   RU   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Inverse  s    c         C   sy   | j  \ } } | j d d k r. | j } n  | j d d k rM | j } n  d |  j d  |  j |  |  j |  f S(   Ni    i   s
   %s(%s, %s)s	   numpy.dot(   RT   t   shapet   TR^   RU   (   RW   Ra   t   arg1t   arg2(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_DotProduct  s    c            sr   d j  d j   f d   | j D   } d j  d j   f d   | j D   } d j    j d  | |  S(   s   Piecewise function printers   [{0}]R   c         3   s!   |  ] }   j  | j  Vq d  S(   N(   RU   Ra   (   Rj   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>  s    c         3   s!   |  ] }   j  | j  Vq d  S(   N(   RU   R   (   Rj   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>  s    s    {0}({1}, {2}, default=numpy.nan)s   numpy.select(   R]   R_   RT   R^   (   RW   Ra   t   exprst   conds(    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR     s    ++c         C   s   i d d 6d d 6d d 6d d 6d	 d
 6d d 6} | j  | k r |  j | j  } |  j | j  } d j d |  j d | | j   d | d |  St t |   j |  S(   s.   Relational printer for Equality and UnequalityR   s   ==R   s   !=R   R   R   s   <=R   R   R   s   >=s   {op}({lhs}, {rhs})R   s   numpy.R   R   (	   R   RU   R   R   R]   R^   Rs   R#  R   (   RW   Ra   R   R   R   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR     s    
#c            s5   d j    j d  d j   f d   | j D   S(   s   Logical And printers   {0}.reduce(({1}))s   numpy.logical_andR   c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>,  s    (   R]   R^   R_   RT   (   RW   Ra   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_And'  s    c            s5   d j    j d  d j   f d   | j D   S(   s   Logical Or printers   {0}.reduce(({1}))s   numpy.logical_orR   c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>3  s    (   R]   R^   R_   RT   (   RW   Ra   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt	   _print_Or.  s    c            s5   d j    j d  d j   f d   | j D   S(   s   Logical Not printers   {0}({1})s   numpy.logical_notR   c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>:  s    (   R]   R^   R_   RT   (   RW   Ra   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR  5  s    c            s5   d j    j d  d j   f d   | j D   S(   Ns
   {0}(({1}))s
   numpy.aminR   c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>=  s    (   R]   R^   R_   RT   (   RW   Ra   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_Min<  s    c            s5   d j    j d  d j   f d   | j D   S(   Ns
   {0}(({1}))s
   numpy.amaxR   c         3   s   |  ] }   j  |  Vq d  S(   N(   RU   (   Rj   R   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys	   <genexpr>@  s    (   R]   R^   R_   RT   (   RW   Ra   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_Max?  s    c         C   sN   | j  d k r4 d j |  j d  |  j | j   St t |   j |  Sd  S(   Ng      ?s   {0}({1})s
   numpy.sqrt(   R;   R]   R^   RU   t   baseRs   R#  t
   _print_Pow(   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR:  B  s    %c         C   s'   d |  j  d  |  j | j d  f S(   Ns   %s(%s)s   numpy.anglei    (   R^   RU   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt
   _print_argH  s    c         C   s'   d |  j  d  |  j | j d  f S(   Ns   %s(%s)s
   numpy.imagi    (   R^   RU   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt	   _print_imK  s    c            s5   d   j  d  d j t   f d   | j   f S(   Ns   %s(%s)s	   numpy.mods   , c            s     j  |   S(   N(   RU   (   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX   P  RY   (   R^   R_   R`   RT   (   RW   Ra   (    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR   N  s    c         C   s'   d |  j  d  |  j | j d  f S(   Ns   %s(%s)s
   numpy.reali    (   R^   RU   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt	   _print_reR  s    c         C   s.   d |  j  d  |  j | j d t j  f S(   Ns   %s(%s)s
   numpy.sinci    (   R^   RU   RT   R   RQ   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_sincU  s    c         C   sV   |  j  j | j j d   } | d  k r9 |  j d  } n  d | |  j | j    f S(   Ns   numpy.arrays   %s(%s)(   RZ   Ry   R[   R\   R&   R^   RU   R   (   RW   Ra   R   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR   X  s    c         C   sz   g  t  | j  D]D \ } } |  j |  d d | d | d f f D] } | ^ qE q } d |  j d  d j |  f S(   Ns   [%i, %i]i   i   s   %s(%s)s   numpy.einsums   , (   t	   enumerateRT   RU   R^   R_   (   RW   Ra   R   RV   R   t
   array_list(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt    _print_CodegenArrayTensorProduct^  s    >c         C   s@  d d l  m } | j } | j } | s5 |  j |  St | |  r3d } d   | D } g  } xr | j D]g } g  }	 xK t |  D]= }
 | | k r |	 j | |  n |	 j |  | d 7} q W| j |	  qj Wg  t	 | j
 |  D]% \ } } d |  j |  | f ^ q } d |  j d  d	 j |  f St    d  S(
   Ni(   t   CodegenArrayTensorProducti    c         S   s,   i  |  ]" } | D] } t  |  |  q q S(    (   R   (   Rj   R   R   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys
   <dictcomp>k  s   	 i   s   %s, %ss   %s(%s)s   numpy.einsums   , (   t   sympy.codegen.array_utilsRB  Ra   R   RU   t
   isinstanceR   R   R   t   zipRT   R^   R_   t   NotImplementedError(   RW   Ra   RB  R9  R   R   R   R   R   R   R   RV   t   indt   elems(    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_CodegenArrayContractionc  s,    		>c         C   s   t  | j  } t |  d k r* t  n  t | d  d k rI t  n  d |  j d  |  j | j  | d d | d d f S(   Ni   i    i   s   %s(%s, 0, axis1=%s, axis2=%s)s   numpy.diagonal(   t   listt   diagonal_indicesR   RF  R^   RU   Ra   (   RW   Ra   RK  (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_CodegenArrayDiagonal}  s    		c         C   s9   d |  j  d  |  j | j  |  j | j j d  f S(   Ns
   %s(%s, %s)s   numpy.transposei    (   R^   RU   Ra   t   permutationRT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_CodegenArrayPermuteDims  s    c         C   s   |  j  d | j  S(   Ns	   numpy.add(   R   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt!   _print_CodegenArrayElementwiseAdd  s    (&   R\   R   R  R   Rw   R   R  Rx   R   t   _known_functions_numpyRk   Rl   R   Rz   R(  R+  R,  R-  R2  R   R   R5  R6  R  R7  R8  R:  R;  R<  R   R=  R>  R   RA  RI  RL  RN  RO  (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR#    s<   5						
																	t   jvt   besseljt   yvt   besselyt   ivt   besselit   kvt   besselkt   gammalnt   psit   digammat   pocht   RisingFactorialt   eval_jacobit   jacobit   eval_gegenbauert
   gegenbauert   eval_chebytt
   chebyshevtt   eval_chebyut
   chebyshevut   eval_legendret   legendret   eval_hermitet   hermitet   eval_laguerret   laguerret   eval_genlaguerret   assoc_laguerret   golden_ratiot   GoldenRatiot   SciPyPrinterc           B   s}   e  Z e e e j j   g  e j   D] \ Z Z	 e d  e	 f ^ q%   Z d   e
 j   D Z d   Z e Z d   Z RS(   s   scipy.special.c         C   s#   i  |  ] \ } } d  | |  q S(   s   scipy.constants.(    (   Rj   Rk   Rl   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys
   <dictcomp>  s   	 c         C   s   g  g  g  } } } xJ | j  j   D]9 \ \ } } } | j |  | j |  | j |  q$ Wd j d |  j d  d | d | d | d | j  S(   Ns)   {name}({data}, ({i}, {j}), shape={shape})RS   s   scipy.sparse.coo_matrixt   dataR   R   R.  (   t   _smatR   R   R]   R^   R.  (   RW   Ra   R   R   Rq  t   rR   Rl   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyR     s    "	c         C   sO   d j  |  j d  |  j | j d  |  j | j d  |  j | j d   S(   Ns   {0}({2}, {1}, {3})s   scipy.special.lpmvi    i   i   (   R]   R^   RU   RT   (   RW   Ra   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_assoc_legendre  s
    (   R\   R   Rw   R   R#  Rx   R   t   _known_functions_scipy_specialRk   Rl   t    _known_constants_scipy_constantsRz   R   R   Rt  (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRp    s   5	t   SymPyPrinterc           B   s6   e  Z d    e e j   e j    D Z d   Z RS(   c         C   s#   i  |  ] \ } } d  | |  q S(   s   sympy.(    (   Rj   Rk   Rl   (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pys
   <dictcomp>  s   	 c            sa   | j  j p d } d   j | | r* d n d | j  j  d j t   f d   | j   f S(   NRY   s   %s(%s)R~   s   , c            s     j  |   S(   N(   RU   (   RV   (   RW   (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRX     RY   (   R   R   R^   R\   R_   R`   RT   (   RW   Ra   t   mod(    (   RW   s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   _print_Function  s    )(   R\   R   R   R   R   R   Rx   Ry  (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyRw    s   		N(.   R  t   collectionsR    t	   itertoolsR   t
   sympy.coreR   R   R   R   R   R   t   codeprinterR   R   t   _kw_only_py2R   R   R   R   Rc   Re   Rf   R  Rx   Rk   t   setattrR
  R   t   _not_in_mpmathR   Rl   t
   _in_mpmathRw   R  t   _known_constants_mpmathR  t   _not_in_numpyt	   _in_numpyRP  R#  Rz   Ru  Rv  Rp  Rw  (    (    (    s4   lib/python2.7/site-packages/sympy/printing/pycode.pyt   <module>   s   (


		 	7	
17	

