U
    0e                     @   st  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	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ e	ddd\ZZZZedeeZ edeeZ!edeeZ"edeeZ#edeeZ$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd  Z+d!d" Z,d#d$ Z-d%d& Z.d'd( Z/d)d* Z0d+d, Z1d-d. Z2d/d0 Z3d1d2 Z4d3d4 Z5d5S )6    )sqrt)powsimp)raises)	unchanged)symbolsS)IdentityMatrixSymbolImmutableMatrix
ZeroMatrix	OneMatrixMatrix)NonSquareMatrixError)MatPowMatAddMatMul)Inverse)MatrixElementzn m l kT)integerABCDEc                  C   s   t ddgddgg} t| dd dks*tt| dd dks@tt| dd dksVtt| dd dksltt| dd dkstd S )	N            r   r   r   r   r      )r
   r   AssertionErrorX r$   P/tmp/pip-unpacked-wheel-_6tpq7m6/sympy/matrices/expressions/tests/test_matpow.pytest_entry_matrix   s    r&   c                  C   s   ddl m}  ttdd dks"tttdd dks8tttdd td ksRttttdd | sjtttttd tstd S )Nr   Sumr   r   r   r   )Zsympy.concreter(   r   r   r!   
isinstancenr   r'   r$   r$   r%   test_entry_symbol   s    r+   c            	      C   s  t ddd} t| d ttdks*tt| d |  ksDtt| d |  d ksbtt| t t| t d | t d g| t d | t d ggkstt d	d
d}t dd
d}t dd
d}|j| tj	 }| t
t|d |d  |d |d   |d |d   ggks&t||j| tj	  }t|d |d  |d |d   |d |d   }| t
|d | g|d | g|d | ggkst||j tj	 }t|d |d  |d |d   |d |d   }||j  | }| |kst| d }| d | d  | d | d   }t
| d | d  g| d  | d gg| }| |ksvt| | }| |  | kstd S )Nr#   r   r   r   r   r   )r   r   )r   r   ar   bc)r   r   )r	   r   as_explicitr
   r   r!   r*   Tr   Halfr   r   )	r#   r,   r-   r.   exprmZdenomexpectedZdetr$   r$   r%   test_as_explicit_symbol&   s4    J4:4 ,r6   c                  C   s   t ddgddgg} t| d t tdks2tt| d | ksHtt| d | d ksbtt| d |  ks|tt| d |  d kstt dg} t| tj | tj kstd S )Nr   r   r   r   r   r/   )r
   r   r0   r   r!   invr   r2   )r   r$   r$   r%   test_as_explicit_matrixI   s    
r9   c                  C   s~   t td ttkstt td tks0tt td tjksHtdtjtj	tfD ] } t t|  t t| ksXtqXd S )Nr   r   r/   r   )
r   r   doitr   r*   r!   Ir   r2   Pi)rr$   r$   r%   test_doit_symbolU   s
    r>   c                      s   t ddgddgg t d t tdks2tt d  ksHtt d  d ksbtt d   ks|tt d   d ksttt dgtj t dgkstt ddgddgg tt	 fdd	 tt	 fd
d	 d S )Nr   r   r   r   r   r/   r7   c                      s   t  d S Nr/   r   r:   r$   r"   r$   r%   <lambda>g       z"test_doit_matrix.<locals>.<lambda>c                      s   t  d S Nr7   r@   r$   r"   r$   r%   rA   h   rB   )
r
   r   r:   r   r!   r8   r   r2   r   
ValueErrorr$   r$   r"   r%   test_doit_matrix]   s    $rE   c                      sl   t ddd tdddgdddggdd	ddtjtjtfD ],tt fd
d ttfdd q:d S )Nr   r   r   r   r         r/   r   c                      s
   t  S Nr   r$   )r   r=   r$   r%   rA   o   rB   z test_nonsquare.<locals>.<lambda>c                      s
   t  S rH   rI   r$   )r   r=   r$   r%   rA   p   rB   )r	   r
   r   r2   r<   r*   r   r   r$   r$   )r   r   r=   r%   test_nonsquarek   s
    rJ   c                  C   s@   t ddgddgg} t| t | t   kr6| ks<n td S )Nr   r   )r
   r   r*   r:   r!   r"   r$   r$   r%   test_doit_equals_pows   s    rK   c                  C   st   t ddgddgg} t ddgddgg}tt| |d | | d ksLttt| |d | | d ksptd S )Nr   r   r   r   rF   )r
   r   r   r:   r!   r   )r#   Yr$   r$   r%   test_doit_nested_MatrixExprx   s    $rM   c                  C   s   t t} t| d | kstt| t | ks4tt| d | ksJtt| d | ks`tt d}t|t |ks~tt|d |kstt|d |kstd S )Nr   r   r   r/   )r   r*   r   r:   r!   )klr$   r$   r%   test_identity_power   s    rQ   c                      s   t tt t d  ks ttt fdd t d ttksLtt t  ksbttt fdd t ddtt kstttfdd td ksttd tdkstttfd	d d S )
Nr   c                      s   t  d S r?   r@   r$   z1r$   r%   rA      rB   z!test_zero_power.<locals>.<lambda>r   c                      s   t  d S rC   r@   r$   rR   r$   r%   rA      rB   r   c                      s   t  d S )NrN   r@   r$   z2r$   r%   rA      rB   r   c                      s   t  d S r?   r@   r$   rT   r$   r%   rA      rB   )r   r*   r   r:   r!   r   rD   r   r$   r$   )rS   rU   r%   test_zero_power   s    

rV   c                  C   s   t dd} | d tdkst| d | ks.t| |  | d   krNd|  ksTn t| |  |  | d   krxd|  ks~n tt tt} | |  | d   krt|  ksn tt| td  |  | t   krttd  |  ksn td S )Nr   r   r   r   	   )r   r   r!   r*   r   )or$   r$   r%   test_OneMatrix_power   s    
&*
&rY   c                  C   st  ddl m}  tt jd tt d j  kr@tjtj d ksFn ttt jd jtt d ksfttjjjd td ksttjt jt ttt  kstt	jt
j d jt
t	 d kstt
t	 jd jd t
t	 d kst| | td td  d  td td  d ks ttt d	 jd	 tt d
 jksFttt t jt jtt tt  ksptd S )Nr   )	TransposerF   r    i#   r   r      )Z$sympy.matrices.expressions.transposerZ   r   r   r1   r!   r;   rP   rO   r   r   r:   )ZTPr$   r$   r%   test_transpose_power   s    :  "$:&r^   c                   C   s   t ttd ttkstt ttd t tks<tt ttd ttdks\tt ttd tksvttt td ttksttt td t tksttt td ttdksttt td tkstd S )Nr   r   r   r7   r/   )r   r   r   r:   r   r*   r!   r$   r$   r$   r%   test_Inverse   s      r_   c                   C   s   t d d t kstt d d tt dks.tt d d tt dksHtt d d t ks\tt d d d d	 tt d
ks~tt t t t td  kstd S )Nr   r   r   rG   r7   rN   r/   r   rF   x   )r   r!   r   r*   r$   r$   r$   r%   test_combine_powers   s    "ra   c                   C   sz   t ttdstt ttds tt tttds4tt tttddsJtt tttdds`tt tttddsvtd S )Nr   r   r/   )r   r   r   r!   r   r$   r$   r$   r%   test_unchanged   s    rb   c                   C   s   t tdd  d S )Nc                   S   s   ddt   S )Nr   r7   )r   r$   r$   r$   r%   rA      rB   z(test_no_exponentiation.<locals>.<lambda>)r   NotImplementedErrorr$   r$   r$   r%   test_no_exponentiation   s    rd   N)6Z(sympy.functions.elementary.miscellaneousr   Zsympy.simplify.powsimpr   Zsympy.testing.pytestr   Zsympy.core.exprr   Z
sympy.corer   r   Zsympy.matricesr   r	   r
   r   r   r   Zsympy.matrices.commonr   Zsympy.matrices.expressionsr   r   r   Z"sympy.matrices.expressions.inverser   Z"sympy.matrices.expressions.matexprr   r*   r4   rP   rO   r   r   r   r   r   r&   r+   r6   r9   r>   rE   rJ   rK   rM   rQ   rV   rY   r^   r_   ra   rb   rd   r$   r$   r$   r%   <module>   s@    		#		