K iddlmZddlmZmZddlmZddlmZddl m Z ddl m Z ddl mZddlmZGd d eZd Zy ) )Basic)Expr ExprBuilder)S)default_sort_key)uniquely_named_symbol)sympify) MatrixBase)NonSquareMatrixErrorcXeZdZdZdZdZdZdZdZdZ e dZ dZ d Z d Zd Zy ) TraceaSMatrix 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 Tct|}|jstdt|z|jdur t dt j||S)Nz#input to Trace, %s, is not a matrixFzTrace of a non-square matrix)r is_Matrix TypeErrorstr is_squarer r__new__)clsmats f/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/matrices/expressions/trace.pyrz Trace.__new__"sPcl}}ACHLM M ==E !&'EF F}}S#&&c|SNselfs r_eval_transposezTrace._eval_transpose-s rcddlm}ddlm}t ||r |j |j |S|j}t |trt|j|S)NrSum) MatrixElement) sympy.concrete.summationsr matexprr" isinstancerewritediffdoitr NotImplementedError_eval_derivative)rvr r"exprs rr*zTrace._eval_derivative0sX1* a '<<$))!, ,yy{ dE "% %$$Q''rc >ddlm}m}|jdj |}|D]}|j dk(rFt |t ||jd|jdgdg|j|_nEt |t ||jd|jd|j gddg|_tjtjg|_|j|_ |j|_ d|_ d|_|S)Nr)ArrayTensorProductArrayContractionr!)r!) validator)r)0sympy.tensor.array.expressions.array_expressionsr.r/args_eval_derivative_matrix_lineshigherr_lines _validaterOne_first_pointer_parent_second_pointer_parent_first_pointer_index_second_pointer_index)rxr.r/rlrs rr5z#Trace._eval_derivative_matrix_lines;si IIaL 6 6q 9$ )ByyA~'$#. " ! " !  /88  ($#. " ! " ! "    BI')yyB $(* B %&'B #'(B $I$ )Jrc |jdS)Nr)r4rs rargz Trace.argesyy|rc $|jddr;|jjdi|}|j}||St |St |jt rt|jSt |jS)NdeepTr)getrBr( _eval_tracer r%r trace)rhintsrBresults rr(z Trace.doitist 99VT "$((--(%(C__&F! Sz!$((J/TXX&TXX&rcdt|jjjSr)r rB as_explicitr(rs rrKzTrace.as_explicitxs#TXX))+,1133rcddlm}ddlm|jt |rÈfd}t ttj|}t j|rBjt ttjfd}|jj|djd|ztS|S)Nr)MatMul) Transposechj|}t|r |j}t|Sr)r4r%rBr)r>arN trace_args r get_arg_keyz%Trace._normalize..get_arg_keys/NN1%a+A'**r)keyc4tj|Sr)rr4)r>rQs rz"Trace._normalize..sGWXaXfXfghXiGjr) !sympy.matrices.expressions.matmulrM$sympy.matrices.expressions.transposerNrBr%minrangelenr4r(fromiterr )rrMrRindminrNrQs @@r _normalizezTrace._normalize{s =BHH i ( + s9>>23EF)..0)<%i0557 U3y~~#67=jk vw(?)..QXRXBY(YZI# # rc ddlm}td|g}||j||f|d|jjdz f}|j S)Nrrir!)r#r rrBrowsr()rr,kwargsr r_ss r_eval_rewrite_as_SumzTrace._eval_rewrite_as_SumsJ1 !#v . AAtxx}}q'8 9 :vvxrN)__name__ __module__ __qualname____doc__is_Traceis_commutativerrr*r5propertyrBr(rKr]rcrrrr r sP&HN ' ((T '4.rr c4t|jS)aTrace 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 rrGrGs ;   rN)sympy.core.basicrsympy.core.exprrrsympy.core.singletonrsympy.core.sortingrsympy.core.symbolrsympy.core.sympifyr sympy.matrices.matrixbaser sympy.matrices.exceptionsr r rGrrrrts1"-"/3&0:KDK\r