
    sg                         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	lmZ dd
lmZ  G d de      Zy)   )
MatrixExpr)Identity    )S)ExprBuilder)cacheit)Pow)_sympify)
MatrixBase)NonSquareMatrixErrorc                        e Zd Zd fd	Zed        Zed        Zed        Zed        Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Z xZS )MatPowc                     t        |      }|j                  st        d      |j                  du rt	        d|z        t        |      }t
        |   | ||      }|r|j                  d      }|S )NzMatPow base should be a matrixFzPower of non-square matrix %s)deep)r
   	is_Matrix	TypeError	is_squarer   super__new__doit)clsbaseexpevaluateoptionsobj	__class__s         T/var/www/html/venv/lib/python3.12/site-packages/sympy/matrices/expressions/matpow.pyr   zMatPow.__new__   so    ~~~<==>>U"&'F'MNNsmgoc4-(((&C
    c                      | j                   d   S )Nr   argsselfs    r   r   zMatPow.base       yy|r   c                      | j                   d   S )Nr   r!   r#   s    r   r   z
MatPow.exp!   r%   r   c                 .    | j                   j                  S N)r   shaper#   s    r   r)   zMatPow.shape%   s    yyr   c                 P    | j                   j                         | j                  z  S r(   )r   as_explicitr   r#   s    r   _get_explicit_matrixzMatPow._get_explicit_matrix)   s    yy$$&00r   c                    ddl m} | j                         }t        |t              r|j
                  j                  rG|j
                  j                  r1 |t        |j
                        D cg c]  }|j                   c} }n5| j                         s|j                         ||f   S ddlm}  || ||      S |||f   S c c}w )Nr   MatMul)MatrixElement)sympy.matrices.expressionsr/   r   
isinstancer   r   
is_Integeris_positiveranger   _is_shape_symbolicr,   "sympy.matrices.expressions.matexprr0   )r$   ijkwargsr/   Akr0   s           r   _entryzMatPow._entry-   s    5IIKa uuAEE$5$5U155\:QVV:;,,.--/155 M$T1a00Aw ;s   ,C c                 H   j                  dd      rfd| j                  D        \  }}n| j                  \  }}t        |t              r2||j                  d   z  }|j                  d   }t        |t              r2t        |t              r||z  S |t
        j                  k(  r|S |t
        j                  k(  rt        |j                        S |t
        j                  k(  rddlm}   ||      j                  di S t        |dd       }| ||      S t        ||      S )	Nr   Tc              3   B   K   | ]  } |j                   di   y w)N )r   ).0arghintss     r   	<genexpr>zMatPow.doit.<locals>.<genexpr>>   s     @s*E*@s   r   r   Inverse_eval_powerr@   )getr"   r2   r   r   r   OneZeror   rowsNegativeOner1   rF   r   getattr)r$   rC   r   r   rF   
eval_powers    `    r   r   zMatPow.doit<   s    99VT"@dii@ID#		ID# v&499Q<C99Q<D v& dJ'3; !%%<K!&&=DII&&!--:%74=%%...T=$7
!c?"dC  r   c                 T    | j                   \  }}t        |j                         |      S r(   )r"   r   	transposer$   r   r   s      r   _eval_transposezMatPow._eval_transposeZ   #    II	cdnn&,,r   c                 T    | j                   \  }}t        |j                         |      S r(   )r"   r   adjointrQ   s      r   _eval_adjointzMatPow._eval_adjoint^   s"    II	cdllnc**r   c                 T    | j                   \  }}t        |j                         |      S r(   )r"   r   	conjugaterQ   s      r   _eval_conjugatezMatPow._eval_conjugateb   rS   r   c                 .    t        j                  | |      S r(   )r	   _eval_derivative)r$   xs     r   r[   zMatPow._eval_derivativef   s    ##D!,,r   c                 N   ddl m} ddlm} ddlm} ddlm} | j                  }| j                  j                  dk(  r|j                  |      s| j                  j                  |      }|D ]  }t        |t        |t        d      |j                  d   || j                  |dz
  z  z  |j                  d   t        d      g      d	d
g|j                         }	|	j"                  d   j"                  |_        d|_        |	j"                  d   j"                  |_        d|_        |	g|_         |S |dkD  dk(  r3|j-                  t/        |      D cg c]  }| j                   c}      }
n|dk(  dk(  r! || j                        j                  |      S |dk  dk(  r:|j-                  t/        |       D cg c]  } || j                         c}      }
n8|dk(  dk(  r| j1                         j                  |      S t3        d| d|      |
j                  |      S c c}w c c}w )Nr   )ArrayContraction   )ArrayTensorProductr   r.   rE   )r   r   )r   r_      )         )	validatorra   Tzcannot evaluate z derived by )0sympy.tensor.array.expressions.array_expressionsr^   *tensor.array.expressions.array_expressionsr`   matmulr/   inverserF   r   r   r)   has_eval_derivative_matrix_linesr   r   _lines	_validater"   _first_pointer_parent_first_pointer_index_second_pointer_parent_second_pointer_indexfromiterr5   r   NotImplementedError)r$   r\   r^   r`   r/   rF   r   lrr8   subexprnewexprs              r   rl   z$MatPow._eval_derivative_matrix_linesi   s   UT"$hh99??f$SWWQZ88;B %%$#. ( ! #DIIA$6 6 ! (	 "9 /88" +2,,q/*>*>')*&+2<<?+?+?(*+'#9-%. I!Goo%*&EQtyy&EFGRiD 499%CCAFFAg$oo5#;&Oawtyy'9&OPGQh499;<<Q??%DRS&TUU44Q77 'F 'Ps   H3H"c                 D    t        | j                  | j                         S r(   )r   r   r   r#   s    r   _eval_inversezMatPow._eval_inverse   s    dii$((++r   )F)__name__
__module____qualname__r   propertyr   r   r)   r   r,   r=   r   rR   rV   rY   r[   rl   ry   __classcell__)r   s   @r   r   r      s            1 1!<-+--*8X,r   r   N)matexprr   specialr   
sympy.corer   sympy.core.exprr   sympy.core.cacher   sympy.core.powerr	   sympy.core.sympifyr
   sympy.matricesr   sympy.matrices.exceptionsr   r   r@   r   r   <module>r      s.       ' $   ' % :J,Z J,r   