ó
~9­\c           @   sq  d  d l  m 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 l m Z d  d l m Z d  d	 l m Z d
 d d d d d g Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j j  d ƒ d Z! e j j" e! ƒ e _ d  S(!   iÿÿÿÿ(   t
   Derivative(   t   UndefinedFunctiont   AppliedUndef(   t   Symbol(   t   init_printing(   t   split_super_sub(   t   LatexPrintert	   translate(   t   PrettyPrinter(   t   center_accent(   t
   StrPrintert   vprintt	   vsstrreprt   vsprintt   vpprintt   vlatext   init_vprintingt   VectorStrPrinterc           B   s    e  Z d  Z d „  Z d „  Z RS(   s'   String Printer for vector expressions. c         C   s¼   d d l  m } | j } t t g  | j D] } | | k ^ q) ƒ ƒ t t | j d ƒ t	 ƒ @r¨ t
 | j d j ƒ } x* t | j ƒ D] \ } } | | j 7} q‡ W| St ƒ  j | ƒ Sd  S(   Niÿÿÿÿ(   t   dynamicsymbolsi    (   t   sympy.physics.vector.functionsR   t   _tt   boolt   sumt	   variablest
   isinstancet   typet   argsR   t   strt   funct	   enumeratet   _strR
   t   doprint(   t   selft   eR   t   tt   it   olt   v(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyt   _print_Derivative   s    	+c         C   so   d d l  m } | j } t t | ƒ t ƒ rN t ƒ  j | ƒ j d | d ƒ S| j	 j
 d |  j | j d ƒ S(   Niÿÿÿÿ(   R   s   (%s)t    s   , (   R   R   R   R   R   R   R
   R   t   replaceR   t   __name__t	   stringifyR   (   R    R!   R   R"   (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyt   _print_Function    s
    	 (   R)   t
   __module__t   __doc__R&   R+   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR      s   	t   VectorStrReprPrinterc           B   s   e  Z d  Z d „  Z RS(   s+   String repr printer for vector expressions.c         C   s
   t  | ƒ S(   N(   t   repr(   R    t   s(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyt
   _print_str*   s    (   R)   R,   R-   R1   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR.   (   s   t   VectorLatexPrinterc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s&   Latex Printer for vector expressions. c         C   s   d d l  m } | j j } | j } t |  d | ƒ rh t t | ƒ t ƒ rh t	 |  d | ƒ | | ƒ St t | ƒ t ƒ rz| j
 | f k rzt | ƒ \ } } } t | ƒ } g  | D] }	 t |	 ƒ ^ q· } g  | D] }
 t |
 ƒ ^ qÖ } t | ƒ d k rd d j | ƒ } n d } t | ƒ d k rDd d j | ƒ } n d } | rj| d |  j | ƒ 7} n  d | | | Sg  | j
 D] } t |  j | ƒ ƒ ^ q„} |  j d	 } t } |  j d
 oët | ƒ d k oë|  j | j
 d ƒ } d d d d g } | | k ro| d k rqo| d k r8d | d } qo| d k ro| d } t } | d  k	 rlt } qlqon  | r‚d | } n) | d  k	 r¡d | | f } n
 d | } | r¾| d 7} n
 | d 7} | rë| d  k	 rë| d | 7} n  | d j | ƒ Sd  S(   Niÿÿÿÿ(   R   t   _print_i    s   ^{%s}R'   s   _{%s}s   %st   inv_trig_stylet   fold_func_bracketsi   t   asint   acost   atant   acott   abbreviatedt   fullt   arct   powers   \operatorname{%s}^{-1}s   \operatorname{%s}^{%s}s   \operatorname{%s}s   \left(%s\right)t   ,(   R   R   R   R)   R   t   hasattrR   R   R   t   getattrR   R   R   t   lent   joint   _printR   t	   _settingst   Falset   _needs_function_bracketst   Truet   None(   R    t   exprt   expR   R   R"   t   namet   superst   subst   supt   subt   argR   R4   t   inv_trig_power_caset   can_fold_bracketst   inv_trig_table(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR+   1   s`    	'+


c         C   s°  d d l  m } | j ƒ  } t | t ƒ s< d |  j | ƒ S| j } | j } | j t	 ƒ } | j
 } t g  | D] } | j | h k rp t ^ qp ƒ } t g  | D] } | | k ^ q¢ ƒ }	 | sÊ |	 rÚ t ƒ  j | ƒ St | ƒ }
 |  j | ƒ } | j d d ƒ } | d } |
 d k r*d | } n[ |
 d k rCd	 | } nB |
 d
 k r\d | } n) |
 d k rud | } n t ƒ  j | ƒ St | ƒ d k	 r¬| d | d 7} n  | S(   Niÿÿÿÿ(   R   s   \left(%s\right)t   _i   i    s   \dot{%s}i   s	   \ddot{%s}i   s
   \dddot{%s}i   s   \ddddot{%s}(   R   R   t   doitR   R    R   R   RI   t   atomsR   R   t   allt   free_symbolsRG   R   RA   R+   t   split(   R    t   der_exprR   R"   RI   t   redt   symsR#   t   test1t   test2t   dotst   baset
   base_split(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR&   {   s8    			2&
N(   R)   R,   R-   RH   R+   R&   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR2   .   s   Jt   VectorPrettyPrinterc           B   s    e  Z d  Z d „  Z d „  Z RS(   s)   Pretty Printer for vectorialexpressions. c         C   sí  d d l  m } | j } d } t t | j ƒ ƒ } xS t | ƒ d k r‰ | d | k rp | j ƒ  | d 7} q7 t t	 |  ƒ j
 | ƒ Sq7 Wt t | j ƒ t ƒ o´ | j j | f k sÍ t t	 |  ƒ j
 | ƒ S|  j | j ƒ } t | j ƒ d k r
t t	 |  ƒ j
 | ƒ S| d k r,t t	 |  ƒ j
 | ƒ Si d d 6d d 6d d	 6d
 d 6d d 6} | j } |  j s¬d }	 x! t d | ƒ D] }
 |	 d 7}	 q}W| d d c |	 d 7<n" t | d d | | ƒ g | d <t | d | | ƒ | d <| S(   Niÿÿÿÿ(   R   i    i   i   u    u   Ì‡u   Ìˆi   u   âƒ›i   u   âƒœi   R'   t   't   pictures   (t)t   unicode(   R   R   R   t   listt   reversedR   RA   t   popt   superRb   R&   R   R   RI   R   R   R+   Rd   t   __dict__t   _use_unicodet   rangeR	   (   R    t   derivR   R"   t   dot_iR\   t   pformR_   t   dt   apostrophesR#   (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR&   £   s>    	


		"c         C   s   d d l  m } | j } | j } | j } | j } |  j t | ƒ ƒ } t | t	 ƒ od | | f k s} t
 t |  ƒ j | ƒ S| S(   Niÿÿÿÿ(   R   (   R   R   R   R   R   R)   t   _print_SymbolR   R   R   Ri   Rb   R+   (   R    R!   R   R"   R   R   t	   func_nameRo   (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR+   Ó   s    				(   R)   R,   R-   R&   R+   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyRb       s   	0c         K   s@   t  |  |  } d d l m } | d k r< | | _ | GHn  d S(   sB  Function for printing of expressions generated in the
    sympy.physics vector package.

    Extends SymPy's StrPrinter, takes the same setting accepted by SymPy's
    `sstr()`, and is equivalent to `print(sstr(foo))`.

    Parameters
    ==========

    expr : valid SymPy object
        SymPy expression to print.
    settings : args
        Same as the settings accepted by SymPy's sstr().

    Examples
    ========

    >>> from sympy.physics.vector import vprint, dynamicsymbols
    >>> u1 = dynamicsymbols('u1')
    >>> print(u1)
    u1(t)
    >>> vprint(u1)
    u1

    iÿÿÿÿ(   t   builtinsRH   N(   R   t   sympy.core.compatibilityRt   RT   (   RI   t   settingst   outstrRt   (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR   ã   s
    	c         K   s   t  | ƒ } | j |  ƒ S(   s  Function for displaying expression representation's with vector
    printing enabled.

    Parameters
    ==========

    expr : valid SymPy object
        SymPy expression to print.
    settings : args
        Same as the settings accepted by SymPy's sstrrepr().

    (   R.   R   (   RI   Rv   t   p(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR     s    c         K   s   t  | ƒ } | j |  ƒ S(   s  Function for displaying expressions generated in the
    sympy.physics vector package.

    Returns the output of vprint() as a string.

    Parameters
    ==========

    expr : valid SymPy object
        SymPy expression to print
    settings : args
        Same as the settings accepted by SymPy's sstr().

    Examples
    ========

    >>> from sympy.physics.vector import vsprint, dynamicsymbols
    >>> u1, u2 = dynamicsymbols('u1 u2')
    >>> u2d = dynamicsymbols('u2', level=1)
    >>> print("%s = %s" % (u1, u2 + u2d))
    u1(t) = u2(t) + Derivative(u2(t), t)
    >>> print("%s = %s" % (vsprint(u1), vsprint(u2 + u2d)))
    u1 = u2 + u2'

    (   R   R   (   RI   Rv   t   string_printer(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR     s    c         K   sX   t  | ƒ } | j d } d d l m } | | ƒ } z | j |  ƒ SWd | | ƒ Xd S(   sò  Function for pretty printing of expressions generated in the
    sympy.physics vector package.

    Mainly used for expressions not inside a vector; the output of running
    scripts and generating equations of motion. Takes the same options as
    SymPy's pretty_print(); see that function for more information.

    Parameters
    ==========

    expr : valid SymPy object
        SymPy expression to pretty print
    settings : args
        Same as those accepted by SymPy's pretty_print.


    t   use_unicodeiÿÿÿÿ(   t   pretty_use_unicodeN(   Rb   RD   t&   sympy.printing.pretty.pretty_symbologyR{   R   (   RI   Rv   t   ppRz   R{   t   uflag(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR   6  s    c         K   s   t  | ƒ } | j |  ƒ S(   sÅ  Function for printing latex representation of sympy.physics.vector
    objects.

    For latex representation of Vectors, Dyadics, and dynamicsymbols. Takes the
    same options as SymPy's latex(); see that function for more information;

    Parameters
    ==========

    expr : valid SymPy object
        SymPy expression to represent in LaTeX form
    settings : args
        Same as latex()

    Examples
    ========

    >>> from sympy.physics.vector import vlatex, ReferenceFrame, dynamicsymbols
    >>> N = ReferenceFrame('N')
    >>> q1, q2 = dynamicsymbols('q1 q2')
    >>> q1d, q2d = dynamicsymbols('q1 q2', 1)
    >>> q1dd, q2dd = dynamicsymbols('q1 q2', 2)
    >>> vlatex(N.x + N.y)
    '\\mathbf{\\hat{n}_x} + \\mathbf{\\hat{n}_y}'
    >>> vlatex(q1 + q2)
    'q_{1} + q_{2}'
    >>> vlatex(q1d)
    '\\dot{q}_{1}'
    >>> vlatex(q1 * q2d)
    'q_{1} \\dot{q}_{2}'
    >>> vlatex(q1dd * q1 / q1d)
    '\\frac{q_{1} \\ddot{q}_{1}}{\\dot{q}_{1}}'

    (   R2   R   (   RI   Rv   t   latex_printer(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR   X  s    #c          K   s,   t  |  d <t |  d <t |  d <t |    d S(   sý  Initializes time derivative printing for all SymPy objects, i.e. any
    functions of time will be displayed in a more compact notation. The main
    benefit of this is for printing of time derivatives; instead of
    displaying as ``Derivative(f(t),t)``, it will display ``f'``. This is
    only actually needed for when derivatives are present and are not in a
    physics.vector.Vector or physics.vector.Dyadic object. This function is a
    light wrapper to `sympy.interactive.init_printing`. Any keyword
    arguments for it are valid here.

    {0}

    Examples
    ========

    >>> from sympy import Function, symbols
    >>> from sympy.physics.vector import init_vprinting
    >>> t, x = symbols('t, x')
    >>> omega = Function('omega')
    >>> omega(x).diff()
    Derivative(omega(x), x)
    >>> omega(t).diff()
    Derivative(omega(t), t)

    Now use the string printer:

    >>> init_vprinting(pretty_print=False)
    >>> omega(x).diff()
    Derivative(omega(x), x)
    >>> omega(t).diff()
    omega'

    t   str_printert   pretty_printerR   N(   R   R   R   R   (   t   kwargs(    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyR   €  s    !


s   Examples
    ========i    N(#   t   sympyR    t   sympy.core.functionR   R   t   sympy.core.symbolR   t   sympy.interactive.printingR   t   sympy.printing.conventionsR   t   sympy.printing.latexR   R   t   sympy.printing.pretty.prettyR   R|   R	   t   sympy.printing.strR
   t   __all__R   R.   R2   Rb   R   R   R   R   R   R   R-   RY   t   paramst   format(    (    (    s<   lib/python2.7/site-packages/sympy/physics/vector/printing.pyt   <module>   s,   	rC	#			"	(	&