
    sg.                     t   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 g d
Z G d de      Z G d de      Z G d de	      Z G d de      Zd Zd Zd Zd Zd Zd Zej:                  j=                  d      d    Zej:                  jA                  e      e_        y)    )
Derivative)UndefinedFunctionAppliedUndef)Symbol)init_printing)LatexPrinter)PrettyPrinter)center_accent)
StrPrinter)
PRECEDENCE)vprint	vsstrreprvsprintvpprintvlatexinit_vprintingc                       e Zd ZdZd Zd Zy)VectorStrPrinterz'String Printer for vector expressions. c                    ddl m} |j                  t        t	        fd|j
                  D                    t        t        |j                  d         t              z  rPt        |j                  d   j                        }t        |j
                        D ]  \  }}||j                  z  } |S t               j                  |      S )Nr   dynamicsymbolsc              3   (   K   | ]	  }|k(    y wN .0its     P/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/vector/printing.py	<genexpr>z5VectorStrPrinter._print_Derivative.<locals>.<genexpr>   s     1Q!V1   )sympy.physics.vector.functionsr   _tboolsum	variables
isinstancetypeargsr   strfunc	enumerate_strr   doprint)selfer   olr   vr   s         @r   _print_Derivativez"VectorStrPrinter._print_Derivative   s    A1Q[[1124q	?,=>?QVVAY^^$B!!++. *1n)))*I<''**    c                    ddl m} |j                  }t        t	        |      t
              r,t               j                  |      j                  d|z  d      S |j                  j                  d| j                  |j                  d      z  z   S )Nr   r   z(%s) z, )r"   r   r#   r'   r(   r   r   r.   replacer+   __name__	stringifyr)   )r/   r0   r   r   s       r   _print_Functionz VectorStrPrinter._print_Function   sj    Ad1g01<''*226A:rBBvv$..*F!FFFr4   N)r8   
__module____qualname____doc__r3   r:   r   r4   r   r   r      s    1
+Gr4   r   c                       e Zd ZdZd Zy)VectorStrReprPrinterz+String repr printer for vector expressions.c                     t        |      S r   )repr)r/   ss     r   
_print_strzVectorStrReprPrinter._print_str(   s    Awr4   N)r8   r;   r<   r=   rC   r   r4   r   r?   r?   &   s
    5r4   r?   c                   .     e Zd ZdZd fd	Z fdZ xZS )VectorLatexPrinterz&Latex Printer for vector expressions. c                    ddl m} |j                  j                  }|j                  }t        | d|z         r/t        t        |      t              s t        | d|z         ||      S t        t        |      t              r^|j                  |fk(  rNt        |      }|2| j                  |t        d         }| j                  |      }|d|dS t        | A  |      S t        | E  ||      S )Nr   r   _print_Powz^{})r"   r   r+   r8   r#   hasattrr'   r(   r   getattrr)   r   parenthesizer   parenthesize_supersuper_printr:   )r/   exprexpr   r+   r   base	__class__s          r   r:   z"VectorLatexPrinter._print_Function/   s    Ayy!!D)d*+tDz#45274T!124==T
$56DII!<M$<D ((z%/@A..t4%)3//w~d++7*455r4   c                 x   ddl m} |j                         }t        |t              sd| j                  |      z  S |j                  |j                  }|j                  t              }|j                  }t        fd|D               }t        fd|D               }|s|rt        | 5  |      S t        |      }| j                  |      }	|	j!                  dd      }
|
d   }	|dk(  rd|	z  }	n0|d	k(  rd
|	z  }	n%|dk(  rd|	z  }	n|dk(  rd|	z  }	nt        | 5  |      S t        |
      dk7  r|	d|
d   z   z  }	|	S )Nr   r   z\left(%s\right)c              3   D   K   | ]  }|j                   hk(  sd   yw)TN)free_symbolsr   s     r   r    z7VectorLatexPrinter._print_Derivative.<locals>.<genexpr>Q   s     CQ^^s-BCs     c              3   (   K   | ]	  }|k(    y wr   r   r   s     r   r    z7VectorLatexPrinter._print_Derivative.<locals>.<genexpr>R   s     -1Q-r!   _   z\dot{%s}   z	\ddot{%s}   z
\dddot{%s}   z\ddddot{%s})r"   r   doitr'   r   r.   r#   rP   atomsr   r&   allrN   r3   lenr:   split)r/   der_exprr   rP   redsymstest1test2dotsrR   
base_splitr   rS   s              @r   r3   z$VectorLatexPrinter._print_DerivativeE   sE   A==?(J/%X(>>> }}jj&!!CcCCC----E7,X66 4y##D)ZZQ'
!}19%DQY$&DQY 4'DQY!D(D7,X66z?aC*Q-''Dr4   r   )r8   r;   r<   r=   r:   r3   __classcell__rS   s   @r   rE   rE   ,   s    06," "r4   rE   c                   ,     e Zd ZdZ fdZ fdZ xZS )VectorPrettyPrinterz)Pretty Printer for vectorialexpressions. c                    ddl m} |j                  }d}t        t	        |j
                              }t        |      dkD  r<|d   |k(  r|j                          |dz  }nt        | %  |      S t        |      dkD  r<t        t        |j                        t              r|j                  j                  |fk(  st        | %  |      S | j                  |j                        }t        |j                         dkD  rt        | %  |      S |dk\  rt        | %  |      S dddd	d
d}|j"                  }| j$                  s-d}	t'        d|      D ]  }
|	dz  }		 |d   dxx   |	dz   z  cc<   |S t)        |d   d   ||         g|d<   |S )Nr   r   rY      r6   u   ̇u   ̈u   ⃛u   ⃜)r   rY   rZ   r[   r\   'picturez(t))r"   r   r#   listreversedr&   r`   poprN   r3   r'   r(   rP   r   r)   r:   rq   __dict___use_unicoderanger
   )r/   derivr   r   dot_ird   pformrg   dapostrophesr   rS   s              r   r3   z%VectorPrettyPrinter._print_Derivativem   s   AHU__-.$i!mBx1}

w077 $i!m 4

+->?QD(7,U33((4E u}}!7,U33 A:7,U33 ,,32	4 NN   K1e_ #s"#iLO{U22O  *!I,q/4;GHAiLr4   c                     ddl m} |j                  }|j                  }|j                  }|j
                  }| j                  t        |            }t        |t              r||fk(  st        | -  |      S |S )Nr   r   )r"   r   r#   r+   r)   r8   _print_Symbolr   r'   r   rN   r:   )	r/   r0   r   r   r+   r)   	func_namerz   rS   s	           r   r:   z#VectorPrettyPrinter._print_Function   sk    AvvvvMM	""6)#45 4!23!7*1--r4   )r8   r;   r<   r=   r3   r:   ri   rj   s   @r   rl   rl   j   s    3.` r4   rl   c                 T    t        | fi |}ddl}|dk7  r||_        t        |       yy)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   builtinsrX   print)rP   settingsoutstrr   s       r   r   r      s1    6 T&X&F&
f 	r4   c                 :    t        |      }|j                  |       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().

    )r?   r.   )rP   r   ps      r   r   r      s     	X&A99T?r4   c                 :    t        |      }|j                  |       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.   )rP   r   string_printers      r   r   r      s    6 &h/N!!$''r4   c                     t        |      }|j                  d   }ddlm}  ||      }	 |j	                  |        ||       S #  ||       w xY w)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_unicode)rl   	_settings&sympy.printing.pretty.pretty_symbologyr   r.   )rP   r   ppr   r   uflags         r   r   r      sN    & 
X	&B
 ,,}-KI{+E"zz$5!5!s   A 
Ac                 :    t        |      }|j                  |       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}}'

    )rE   r.   )rP   r   latex_printers      r   r   r   "  s     H 'x0M  &&r4   c                  P    t         | d<   t        | d<   t        | d<   t        di |  y)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'

    str_printerpretty_printerr   Nr   )r   r   r   r   )kwargss    r   r   r   K  s/    B &F=&F$F?Fr4   zExamples
    ========N)!sympy.core.functionr   r   r   sympy.core.symbolr   sympy.interactive.printingr   sympy.printing.latexr   sympy.printing.pretty.prettyr	   r   r
   sympy.printing.strr   sympy.printing.precedencer   __all__r   r?   rE   rl   r   r   r   r   r   r   r=   ra   paramsformatr   r4   r   <module>r      s    * ? $ 4 - 6 @ ) 0Gz G.+ ; ;|@- @F F"(>"D&'R$N 
			$	$%=	>q	A'//66v> r4   