U
    ZÊ¹j.  ã                   @   s  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 d dlmZ d dlmZ d d	lmZ d
dddddgZG dd„ deƒZG dd„ deƒZG dd„ de	ƒZG dd„ deƒZdd
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej d¡d  Zej  e¡e_dS ) é    )Ú
Derivative)ÚUndefinedFunctionÚAppliedUndef)ÚSymbol)Úinit_printing)ÚLatexPrinter)ÚPrettyPrinter)Úcenter_accent)Ú
StrPrinter)Ú
PRECEDENCEÚvprintÚ	vsstrreprÚvsprintÚvpprintÚvlatexÚinit_vprintingc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚVectorStrPrinterz'String Printer for vector expressions. c                    s„   ddl m} |j‰ tt‡ fdd„|jD ƒƒƒtt|jd ƒt	ƒ@ rtt
|jd jƒ}t|jƒD ]\}}||j7 }q\|S tƒ  |¡S d S )Nr   ©Údynamicsymbolsc                 3   s   | ]}|ˆ kV  qd S ©N© ©Ú.0Úi©Útr   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/vector/printing.pyÚ	<genexpr>   s     z5VectorStrPrinter._print_Derivative.<locals>.<genexpr>)Úsympy.physics.vector.functionsr   Ú_tÚboolÚsumÚ	variablesÚ
isinstanceÚtypeÚargsr   ÚstrÚfuncÚ	enumerateÚ_strr
   Údoprint)ÚselfÚer   Úolr   Úvr   r   r   Ú_print_Derivative   s    ÿz"VectorStrPrinter._print_Derivativec                 C   sR   ddl m} |j}tt|ƒtƒr8tƒ  |¡ d| d¡S |j	j
d|  |jd¡  S )Nr   r   z(%s)Ú z, )r   r   r   r#   r$   r   r
   r*   Úreplacer'   Ú__name__Ú	stringifyr%   )r+   r,   r   r   r   r   r   Ú_print_Function   s
    z VectorStrPrinter._print_FunctionN)r2   Ú
__module__Ú__qualname__Ú__doc__r/   r4   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚVectorStrReprPrinterz+String repr printer for vector expressions.c                 C   s   t |ƒS r   )Úrepr)r+   Úsr   r   r   Ú
_print_str(   s    zVectorStrReprPrinter._print_strN)r2   r5   r6   r7   r;   r   r   r   r   r8   &   s   r8   c                       s.   e Zd ZdZd‡ fdd„	Z‡ fdd„Z‡  ZS )ÚVectorLatexPrinterz&Latex Printer for vector expressions. Nc                    sº   ddl m} |jj}|j}t| d| ƒrJtt|ƒtƒsJt	| d| ƒ||ƒS tt|ƒtƒr¨|j
|fkr¨t|ƒ}|d k	rš|  |td ¡}|  |¡}d||f S tƒ  |¡S ntƒ  ||¡S d S )Nr   r   Z_print_ÚPowz%s^{%s})r   r   r'   r2   r   Úhasattrr#   r$   r   Úgetattrr%   r   Zparenthesizer   Zparenthesize_superÚsuperZ_printr4   )r+   ÚexprÚexpr   r'   r   Úbase©Ú	__class__r   r   r4   /   s    ÿ
z"VectorLatexPrinter._print_Functionc                    s(  ddl m} | ¡ }t|tƒs,d|  |¡ S |j‰ |j}| t	¡}|j
}t‡ fdd„|D ƒƒ }t‡ fdd„|D ƒƒ }|s€|rŒtƒ  |¡S t|ƒ}|  |¡}	|	 dd¡}
|
d }	|dkrÄd	|	 }	nB|d
krÖd|	 }	n0|dkrèd|	 }	n|dkrúd|	 }	ntƒ  |¡S t|
ƒdk�r$|	d|
d  7 }	|	S )Nr   r   z\left(%s\right)c                 3   s   | ]}|j ˆ hkrd V  qdS )TN)Zfree_symbolsr   r   r   r   r   Q   s      z7VectorLatexPrinter._print_Derivative.<locals>.<genexpr>c                 3   s   | ]}ˆ |kV  qd S r   r   r   r   r   r   r   R   s     Ú_é   z\dot{%s}é   z	\ddot{%s}é   z
\dddot{%s}é   z\ddddot{%s})r   r   Zdoitr#   r   r*   r   rA   Zatomsr   r"   Úallr@   r/   Úlenr4   Úsplit)r+   Zder_exprr   rA   ÚredÚsymsZtest1Ztest2ÚdotsrC   Z
base_splitrD   r   r   r/   E   s8    






z$VectorLatexPrinter._print_Derivative)N)r2   r5   r6   r7   r4   r/   Ú__classcell__r   r   rD   r   r<   ,   s   r<   c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )ÚVectorPrettyPrinterz)Pretty Printer for vectorialexpressions. c                    s4  ddl m} |j}d}tt|jƒƒ}t|ƒdkr\|d |krN| ¡  |d7 }q$tƒ  	|¡S q$t
t|jƒtƒrz|jj|fks†tƒ  	|¡S |  |j¡}t|jƒdkr¬tƒ  	|¡S |dkrÀtƒ  	|¡S dddd	d
dœ}|j}| j�sd}	td|ƒD ]}
|	d7 }	qì|d d  |	d 7  < nt|d d || ƒg|d< |S )Nr   r   éÿÿÿÿrG   é   r0   u   Ì‡u   Ìˆu   âƒ›u   âƒœ)r   rG   rH   rI   rJ   ú'Úpicturez(t))r   r   r   ÚlistÚreversedr"   rL   Úpopr@   r/   r#   r$   rA   r   r%   r4   rV   Ú__dict__Z_use_unicodeÚranger	   )r+   Zderivr   r   Zdot_irO   ÚpformrP   ÚdZapostrophesr   rD   r   r   r/   m   s@    
ÿü
z%VectorPrettyPrinter._print_Derivativec                    sV   ddl m} |j}|j}|j}|j}|  t|ƒ¡}t|t	ƒrF||fksRt
ƒ  |¡S |S )Nr   r   )r   r   r   r'   r%   r2   Z_print_Symbolr   r#   r   r@   r4   )r+   r,   r   r   r'   r%   Ú	func_namer\   rD   r   r   r4   �   s    z#VectorPrettyPrinter._print_Function)r2   r5   r6   r7   r/   r4   rQ   r   r   rD   r   rR   j   s   0rR   c                 K   s.   t | f|Ž}ddl}|dkr*||_t|ƒ dS )aJ  Function for printing of expressions generated in the
    sympy.physics vector package.

    Extends SymPy's StrPrinter, takes the same setting accepted by SymPy's
    :func:`~.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

    r   NÚNone)r   ÚbuiltinsrF   Úprint)rA   ÚsettingsZoutstrr`   r   r   r   r   ­   s
    c                 K   s   t |ƒ}| | ¡S )a  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().

    )r8   r*   )rA   rb   Úpr   r   r   r   Ð   s    c                 K   s   t |ƒ}| | ¡S )a�  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*   )rA   rb   Zstring_printerr   r   r   r   á   s    c                 K   sD   t |ƒ}|jd }ddlm} ||ƒ}z| | ¡W ¢S ||ƒ X dS )aú  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 :func:`~.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.


    Úuse_unicoder   )Úpretty_use_unicodeN)rR   Z	_settingsÚ&sympy.printing.pretty.pretty_symbologyre   r*   )rA   rb   Úpprd   re   Zuflagr   r   r   r      s    
c                 K   s   t |ƒ}| | ¡S )aÑ  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 :func:`~.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}}'

    )r<   r*   )rA   rb   Úlatex_printerr   r   r   r   "  s    $c                  K   s&   t | d< t| d< t| d< tf | Ž dS )aó  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 :func:`~.init_printing`. Any keyword
    arguments for it are valid here.

    {0}

    Examples
    ========

    >>> from sympy import Function, symbols
    >>> 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:

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

    Zstr_printerZpretty_printerrh   N)r   r   r   r   )Úkwargsr   r   r   r   K  s    !zExamples
    ========N)!Zsympy.core.functionr   r   r   Zsympy.core.symbolr   Zsympy.interactive.printingr   Zsympy.printing.latexr   Zsympy.printing.pretty.prettyr   rf   r	   Zsympy.printing.strr
   Zsympy.printing.precedencer   Ú__all__r   r8   r<   rR   r   r   r   r   r   r   r7   rM   ÚparamsÚformatr   r   r   r   Ú<module>   s.   
ÿ>C#")'