
    g.                        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                            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                       e Zd ZdZd Zd ZdS )VectorStrPrinterz'String Printer for vector expressions. c                    ddl m} |j        t          t	          fd|j        D                                 t          t          |j        d                   t                    z  rEt          |j        d         j                  }t          |j                  D ]\  }}||j        z  }|S t                                          |          S )Nr   dynamicsymbolsc              3   $   K   | ]
}|k    V  d S N .0its     Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/physics/vector/printing.py	<genexpr>z5VectorStrPrinter._print_Derivative.<locals>.<genexpr>   s'      11Q!V11111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AAAAA1111Q[11111224q	??,=>>? 	+QVAY^$$B!!+.. * *1n))I<<''***r!   c                 &   ddl m} |j        }t          t	          |          t
                    r8t                                          |                              d|z  d          S |j	        j
        d|                     |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   s    AAAAAAd1gg011 	C<<''**226A:rBBBv$..*F*F!FFFr!   N)r7   
__module____qualname____doc__r3   r9   r   r!   r   r   r      s=        11
+ 
+ 
+G G G G Gr!   r   c                       e Zd ZdZd ZdS )VectorStrReprPrinterz+String repr printer for vector expressions.c                      t          |          S r   )repr)r/   ss     r   
_print_strzVectorStrReprPrinter._print_str(   s    Awwr!   N)r7   r:   r;   r<   rB   r   r!   r   r>   r>   &   s)        55    r!   r>   c                   .     e Zd ZdZd fd	Z fdZ xZS )VectorLatexPrinterz&Latex Printer for vector expressions. Nc                 Z   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    rpt          |          }|>|                     |t          d                   }|                     |          }|d|dS t                                          |          S t                                          ||          S )Nr   r   _print_Powz^{})r"   r   r+   r7   r#   hasattrr'   r(   r   getattrr)   r   parenthesizer   parenthesize_supersuper_printr9   )r/   exprexpr   r+   r   base	__class__s          r   r9   z"VectorLatexPrinter._print_Function/   s!   AAAAAAy!D)d*++ 	6tDzz#455	6274T!1224===T

$566 	6DI!<M<M$<<D ((z%/@AA..t44%)TT333//ww~~d+++77**4555r!   c                    ddl m} |                                }t          |t                    sd|                     |          z  S |j        |j        }|                    t                    }|j
        }t          fd|D                        }t          fd|D                        }|s|r!t                                          |          S t          |          }|                     |          }	|	                    dd          }
|
d         }	|dk    rd|	z  }	nE|d	k    rd
|	z  }	n9|dk    rd|	z  }	n-|dk    rd|	z  }	n!t                                          |          S t          |
          dk    r|	d|
d         z   z  }	|	S )Nr   r   z\left(%s\right)c              3   4   K   | ]}|j         hk    d V  dS )TN)free_symbolsr   s     r   r    z7VectorLatexPrinter._print_Derivative.<locals>.<genexpr>Q   s1      CCQ^s-B-B-B-B-B-BCCr!   c              3   $   K   | ]
}|k    V  d S 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#   rO   atomsr   r&   allrM   r3   lenr9   split)r/   der_exprr   rO   redsymstest1test2dotsrQ   
base_splitr   rR   s              @r   r3   z$VectorLatexPrinter._print_DerivativeE   s   AAAAAA==??(J// 	?%X(>(>>> }jj&&!CCCCcCCCCCC---------- 	7E 	777,,X666 4yy##D))ZZQ''
!}199%DDQYY$&DDQYY 4'DDQYY!D(DD77,,X666z??aC*Q-''Dr!   r   )r7   r:   r;   r<   r9   r3   __classcell__rR   s   @r   rD   rD   ,   s\        006 6 6 6 6 6," " " " " " " " "r!   rD   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k    rZ|d         |k    r|                                 |dz  }n!t                      	                    |          S t          |          dk    Zt          t          |j                  t                    r|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        s4d}	t'          d|          D ]}
|	dz  }	|d         dxx         |	dz   z  cc<   n&t)          |d         d         ||                   g|d<   |S )Nr   r   rX      r5   u   ̇u   ̈u   ⃛u   ⃜)r   rX   rY   rZ   r[   'picturez(t))r"   r   r#   listreversedr&   r_   poprM   r3   r'   r(   rO   r   r)   r9   rp   __dict___use_unicoderanger
   )r/   derivr   r   dot_irc   pformrf   dapostrophesr   rR   s              r   r3   z%VectorPrettyPrinter._print_Derivativem   s   AAAAAAHU_--..$ii!mmBx1}}



ww00777 $ii!mm 4
++->?? 	5QD((77,,U333((44E u}!!77,,U333 A::77,,U333 ,,32	4 4 N   	IK1e__ # #s"iLOOO{U22OOOO)!I,q/4;GGHAiLr!   c                 
   ddl m} |j        }|j        }|j        }|j        }|                     t          |                    }t          |t                    r||fk    s!t                                          |          S |S )Nr   r   )r"   r   r#   r+   r)   r7   _print_Symbolr   r'   r   rM   r9   )	r/   r0   r   r   r+   r)   	func_namery   rR   s	           r   r9   z#VectorPrettyPrinter._print_Function   s    AAAAAAvvM	""6)#4#455 4!233 	.!77**1---r!   )r7   r:   r;   r<   r3   r9   rh   ri   s   @r   rk   rk   j   sX        33. . . . .`        r!   rk   c                 d    t          | fi |}ddl}|dk    r||_        t          |           dS 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   builtinsrW   print)rO   settingsoutstrr   s       r   r   r      sK    6 T&&X&&FOOO&
f 	r!   c                 J    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().

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

    )rD   r.   )rO   r   latex_printers      r   r   r   "  s&    H 'x00M  &&&r!   c                  Z    t           | d<   t          | d<   t          | d<   t          di |  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'

    str_printerpretty_printerr   Nr   )r   r   r   r   )kwargss    r   r   r   K  s>    B &F=&F$F?Fr!   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>   rD   rk   r   r   r   r   r   r   r<   r`   paramsformatr   r!   r   <module>r      s   * * * * * * ? ? ? ? ? ? ? ? $ $ $ $ $ $ 4 4 4 4 4 4 - - - - - - 6 6 6 6 6 6 @ @ @ @ @ @ ) ) ) ) ) ) 0 0 0 0 0 0  G G G G Gz G G G.    +   ; ; ; ; ; ; ; ;|@ @ @ @ @- @ @ @F     F  "( ( (>" " "D&' &' &'R$ $ $N 
		$	$%=	>	>q	A'/66v>>   r!   