+
    i                         ^ RI Ht ^ RIHtHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt  ! R	 R
]4      tR tR# )    )Basic)ExprExprBuilder)S)default_sort_key)uniquely_named_symbol)sympify)
MatrixBase)NonSquareMatrixErrorc                   l   a  ] tR t^t o RtRtRtR tR tR t	R t
]R 4       tR tR	 tR
 tR tRtV tR# )Tracea  Matrix Trace

Represents the trace of a matrix expression.

Examples
========

>>> from sympy import MatrixSymbol, Trace, eye
>>> A = MatrixSymbol('A', 3, 3)
>>> Trace(A)
Trace(A)
>>> Trace(eye(3))
Trace(Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]))
>>> Trace(eye(3)).simplify()
3
Tc                    \        V4      pVP                  '       g   \        R \        V4      ,          4      hVP                  RJ d   \        R4      h\        P                  ! W4      # )z#input to Trace, %s, is not a matrixFzTrace of a non-square matrix)r	   	is_Matrix	TypeErrorstr	is_squarer   r   __new__)clsmats   &&ڀ/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/matrices/expressions/trace.pyr   Trace.__new__"   sP    cl}}}ACHLMM==E!&'EFF}}S&&    c                    V # N selfs   &r   _eval_transposeTrace._eval_transpose-   s    r   c                    ^ RI Hp ^RIHp \	        W4      '       d!   V P                  V4      P                  V4      # V P                  4       p\	        V\        4      '       d   \        hVP                  V4      # )r   Sum)MatrixElement)sympy.concrete.summationsr"   matexprr#   
isinstancerewritediffdoitr   NotImplementedError_eval_derivative)r   vr"   r#   exprs   &&   r   r+   Trace._eval_derivative0   s\    1*a''<<$))!,,yy{dE""%%$$Q''r   c           
     r   ^ RI HpHp V P                  ^ ,          P	                  V4      pV EF  pVP
                  ^8X  dO   \        V\        VVP                  ^ ,          VP                  ^,          .4      R.VP                  R7      Vn        MM\        V\        VVP                  ^ ,          VP                  ^,          VP
                  .4      RR.4      Vn        \        P                  \        P                  .Vn        VP                  Vn        VP                  Vn        ^ Vn        ^Vn        EK  	  V# )r   )ArrayTensorProductArrayContraction)	validator)      )r      )0sympy.tensor.array.expressions.array_expressionsr0   r1   args_eval_derivative_matrix_lineshigherr   _lines	_validater   One_first_pointer_parent_second_pointer_parent_first_pointer_index_second_pointer_index)r   xr0   r1   rlrs   &&    r   r8   #Trace._eval_derivative_matrix_lines;   s   iIIaL66q9ByyA~'$#. "		! "		! 	 /88	  ($#. "		! "		! "		 
	 BI')yyB$(*		B%&'B#'(B$I J r   c                (    V P                   ^ ,          # )r   )r7   r   s   &r   arg	Trace.arge   s    yy|r   c                @   VP                  R R4      '       d>   V P                  P                  ! R/ VB pVP                  4       pVe   V# \	        V4      # \        V P                  \        4      '       d   \        V P                  4      # \	        V P                  4      # )deepTr   )getrF   r)   _eval_tracer   r&   r
   trace)r   hintsrF   results   &,  r   r)   
Trace.doiti   sx    99VT""((--(%(C__&F!Sz! $((J//TXX&TXX&r   c                d    \        V P                  P                  4       4      P                  4       # r   )r   rF   as_explicitr)   r   s   &r   rQ   Trace.as_explicitx   s#    TXX))+,1133r   c                  aa ^ RI Hp ^ RIHo V P                  o\        SV4      '       d   VV3R lp\        \        \        SP                  4      4      VR7      p\        SP                  V,          S4      '       dD   S! S4      P                  4       o\        \        \        SP                  4      4      V3R lR7      pVP                  SP                  VR SP                  RV ,           4      o\        S4      # V # )r   )MatMul)	Transposec                 |   < SP                   V ,          p\        VS4      '       d   VP                  p\        V4      # r   )r7   r&   rF   r   )rA   arU   	trace_args   & r   get_arg_key%Trace._normalize.<locals>.get_arg_key   s2    NN1%a++A'**r   )keyc                 <   < \        SP                  V ,          4      # r   )r   r7   )rA   rX   s   &r   <lambda>"Trace._normalize.<locals>.<lambda>   s    GWXaXfXfghXiGjr   N)!sympy.matrices.expressions.matmulrT   $sympy.matrices.expressions.transposerU   rF   r&   minrangelenr7   r)   fromiterr   )r   rT   rY   indminrU   rX   s   &   @@r   
_normalizeTrace._normalize{   s     	=BHH	i((+ s9>>23EF)..0)<<%i0557	U3y~~#67=jk	vw(?)..QXRXBY(YZI##r   c                    ^ RI Hp \        RV.4      pV! V P                  WD3,          V^ V P                  P                  ^,
          34      pVP                  4       # )r   r!   i)r$   r"   r   rF   rowsr)   )r   r-   kwargsr"   ri   ss   &&,   r   _eval_rewrite_as_SumTrace._eval_rewrite_as_Sum   sH    1!#v.Atxx}}q'8 9:vvxr   r   N)__name__
__module____qualname____firstlineno____doc__is_Traceis_commutativer   r   r+   r8   propertyrF   r)   rQ   rf   rm   __static_attributes____classdictcell__)__classdict__s   @r   r   r      sX     & HN	'	((T  '4. r   r   c                4    \        V 4      P                  4       # )zTrace of a Matrix.  Sum of the diagonal elements.

Examples
========

>>> from sympy import trace, Symbol, MatrixSymbol, eye
>>> n = Symbol('n')
>>> X = MatrixSymbol('X', n, n)  # A square matrix
>>> trace(2*X)
2*Trace(X)
>>> trace(eye(3))
3
)r   r)   )r-   s   &r   rL   rL      s     ;r   N)sympy.core.basicr   sympy.core.exprr   r   sympy.core.singletonr   sympy.core.sortingr   sympy.core.symbolr   sympy.core.sympifyr	   sympy.matrices.matrixbaser
   sympy.matrices.exceptionsr   r   rL   r   r   r   <module>r      s1    " - " / 3 & 0 :KD K\r   