U
    ZÊ¹jŒ  ã                   @   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s‚t‚d S )	Né   é   é   é   r   ©r   r   ©r   r   é   )r
   r   ÚAssertionError©ÚX© r$   úk/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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ƒs‚t‚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s¨t‚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�s¨t‚||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�s˜t‚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ÚmÚdenomÚexpectedZdetr$   r$   r%   Útest_as_explicit_symbol&   s4    þJ4:4 ,r7   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sšt‚t dgƒ} t| tjƒ ¡ | tj ksÂt‚d S )Nr   r   r   r   r   r/   éþÿÿÿ)r
   r   r0   r   r!   Úinvr   r2   )r   r$   r$   r%   Útest_as_explicit_matrixI   s    
r:   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sšt‚tt dgƒtjƒ ¡ t dgƒks¾t‚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/   r8   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 ©Nr8   rA   r$   r"   r$   r%   rB   h   rC   )
r
   r   r;   r   r!   r9   r   r2   r   Ú
ValueErrorr$   r$   r"   r%   Útest_doit_matrix]   s    $rF   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%   rB   o   rC   z test_nonsquare.<locals>.<lambda>c                      s
   t ˆ ˆƒS rI   rJ   r$   )r   r>   r$   r%   rB   p   rC   )r	   r
   r   r2   r=   r*   r   r   r$   r$   )r   r   r>   r%   Útest_nonsquarek   s
    rK   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    rL   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   rG   )r
   r   r   r;   r!   r   )r#   ÚYr$   r$   r%   Útest_doit_nested_MatrixExprx   s    $rN   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s”t‚t|dƒ ¡ |ksªt‚d S )Nr   éýÿÿÿr   r   r/   )r   r*   r   r;   r!   )ÚkÚlr$   r$   r%   Útest_identity_power   s    rR   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s”t‚tt‡fdd„ƒ tˆdƒ ¡ ˆks¼t‚tˆdƒ ¡ tdƒksÖt‚tt‡fd	d„ƒ d S )
Nr   c                      s   t ˆ dƒ ¡ S r@   rA   r$   ©Úz1r$   r%   rB   Ž   rC   z!test_zero_power.<locals>.<lambda>r   c                      s   t ˆ dƒ ¡ S rD   rA   r$   rS   r$   r%   rB   ‘   rC   r   c                      s   t ˆ dƒ ¡ S )NrO   rA   r$   ©Úz2r$   r%   rB   ”   rC   r   c                      s   t ˆ dƒ ¡ S r@   rA   r$   rU   r$   r%   rB   —   rC   )r   r*   r   r;   r!   r   rE   r   r$   r$   )rT   rV   r%   Útest_zero_power‹   s    

rW   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r¨t|  ks®n t‚t| td  |  ƒ| t   krâttd  |  ksèn t‚d S )Nr   r   r   r   é	   )r   r   r!   r*   r   )Úor$   r$   r%   Útest_OneMatrix_powerš   s    
&*
&rZ   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s€t‚tjt jt ttt  ks t‚t	jt
j d jt
t	 d ksÂt‚t
t	 jd jd t
t	 d ksæt‚| | 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   )Ú	TransposerG   r    iùÿÿÿé#   r   r   éûÿÿÿé   )Z$sympy.matrices.expressions.transposer[   r   r   r1   r!   r<   rQ   rP   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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sìt‚d S )Nr   r   r   r8   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sšt‚d S )Nr   r   r   rH   r8   rO   r/   r   rG   éx   )r   r!   r   r*   r$   r$   r$   r%   Útest_combine_powersÄ   s    "rb   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    rc   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   ddt   S )Nr   r8   )r   r$   r$   r$   r%   rB   Ù   rC   z(test_no_exponentiation.<locals>.<lambda>)r   ÚNotImplementedErrorr$   r$   r$   r%   Útest_no_exponentiationÖ   s    re   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.exceptionsr   Zsympy.matrices.expressionsr   r   r   Z"sympy.matrices.expressions.inverser   Z"sympy.matrices.expressions.matexprr   r*   r4   rQ   rP   r   r   r   r   r   r&   r+   r7   r:   r?   rF   rK   rL   rN   rR   rW   rZ   r_   r`   rb   rc   re   r$   r$   r$   r%   Ú<module>   s@    		#		