
    Ed/                         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dS )    )NonSquareMatrixError   )
MatrixExpr)Identity)S)ExprBuilder)cacheit)Pow)_sympify)
MatrixBasec                        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 xZS )MatPowFc                    t          |          }|j        st          d          |j        st	          d|z            t          |          }t                                          | ||          }|r|                    d          }|S )NzMatPow base should be a matrixzPower of non-square matrix %sF)deep)r   	is_Matrix	TypeError	is_squarer   super__new__doit)clsbaseexpevaluateoptionsobj	__class__s         Alib/python3.11/site-packages/sympy/matrices/expressions/matpow.pyr   zMatPow.__new__   s    ~~~ 	><===~ 	O&'F'MNNNsmmggooc4-- 	'(((&&C
    c                     | j         d         S )Nr   argsselfs    r   r   zMatPow.base       y|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    yr   c                 D    | j                                         | j        z  S r(   )r   as_explicitr   r#   s    r   _get_explicit_matrixzMatPow._get_explicit_matrix)   s    y$$&&00r   c                 t   ddl m} |                                 t          t                    rj        j        r0j        j        r$ |fdt          j                  D              nC| 	                                s
                                ||f         S ddlm}  || ||          S ||f         S )Nr   MatMulc                     g | ]	}j         
S  r   ).0kAs     r   
<listcomp>z!MatPow._entry.<locals>.<listcomp>3   s    :::QV:::r   )MatrixElement)sympy.matrices.expressionsr/   r   
isinstancer   r   
is_Integeris_positiverange_is_shape_symbolicr,   "sympy.matrices.expressions.matexprr7   )r$   ijkwargsr/   r7   r5   s         @r   _entryzMatPow._entry-   s    555555IIKKa   		1u 1AE$5 1F::::U15\\:::;,,.. 1--//155 MLLLLL$}T1a000Awr   c                 T                        dd          rfd| j        D             \  }}n
| j        \  }}t          |t                    r2||j        d         z  }|j        d         }t          |t                    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                 *    g | ]} |j         d i S )r1   )r   )r3   arghintss     r   r6   zMatPow.doit.<locals>.<listcomp>>   s+    @@@s**E**@@@r   r   r   Inverse_eval_powerr1   )getr"   r9   r   r   r   OneZeror   rowsNegativeOner8   rH   r   getattr)r$   rF   r   r   rH   
eval_powers    `    r   r   zMatPow.doit<   sR   99VT"" 	"@@@@di@@@ID##	ID# v&& 	 49Q<C9Q<D v&& 	  dJ'' 	3; !%< 	K!&= 	'DI&&&!- 	/::::::%774==%.....T=$77
 	#:c??"dC   r   c                 @    | j         \  }}t          |j        |          S r(   )r"   r   T)r$   r   r   s      r   _eval_transposezMatPow._eval_transposeZ   s    I	cdfc"""r   c                 ,    t          j        | |          S r(   )r
   _eval_derivative)r$   xs     r   rU   zMatPow._eval_derivative^   s    #D!,,,r   c                 &   
 ddl m} ddlm} ddlm} ddlm
  j        } j	        j
        dk    r|                    |          sЉ 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k    dk    r/|                     fdt/          |          D                       }	n|dk    dk    r# 
 j	                                      |          S |dk     dk    r1|                    
 fdt/          |           D                       }	nF|dk    dk    r'                                                     |          S t3          d d|          |	                    |          S )Nr   )ArrayContraction   )ArrayTensorProductr   r.   rG   )r   r   )r   rY      )         )	validatorr[   Tc                     g | ]	}j         
S r1   r2   )r3   r?   r$   s     r   r6   z8MatPow._eval_derivative_matrix_lines.<locals>.<listcomp>   s    &E&E&EQty&E&E&Er   c                 0    g | ]} j                   S r1   r2   )r3   r?   rH   r$   s     r   r6   z8MatPow._eval_derivative_matrix_lines.<locals>.<listcomp>   s%    &O&O&Oawwty'9'9&O&O&Or   zcannot evaluate z derived by )0sympy.tensor.array.expressions.array_expressionsrX   *tensor.array.expressions.array_expressionsrZ   matmulr/   inverserH   r   r   r)   has_eval_derivative_matrix_linesr   r   _lines	_validater"   _first_pointer_parent_first_pointer_index_second_pointer_parent_second_pointer_indexfromiterr<   r   NotImplementedError)r$   rV   rX   rZ   r/   r   lrr?   subexprnewexprrH   s   `         @r   rh   z$MatPow._eval_derivative_matrix_linesa   sk   UUUUUUTTTTTT""""""$$$$$$h9?f$ 	SWWQZZ 	88;;B % %%$#. ( ! #DIA$6 6 ! (	 	 "9 /8  " +2,q/*>')*&+2<?+?(*+'#9I!G 		Voo&E&E&E&E%**&E&E&EFFGGRiD  	V749%%CCAFFFAg$ 	Voo&O&O&O&O&O5#;;&O&O&OPPGGQh4 	V99;;<<Q???%%DDDRSRS&TUUU44Q777r   c                 8    t          | j        | j                   S r(   )r   r   r   r#   s    r   _eval_inversezMatPow._eval_inverse   s    di$(+++r   )F)__name__
__module____qualname__r   propertyr   r   r)   r	   r,   rB   r   rS   rU   rh   ru   __classcell__)r   s   @r   r   r      s               X   X   X 1 1 W1  ! ! !<# # #- - -*8 *8 *8X, , , , , , ,r   r   N)sympy.matrices.commonr   matexprr   specialr   
sympy.corer   sympy.core.exprr   sympy.core.cacher	   sympy.core.powerr
   sympy.core.sympifyr   sympy.matricesr   r   r1   r   r   <module>r      s    6 6 6 6 6 6                   ' ' ' ' ' ' $ $ $ $ $ $             ' ' ' ' ' ' % % % % % %B, B, B, B, B,Z B, B, B, B, B,r   