o
    GZŽhŒ  ã                   @   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J ‚t| dƒd dks J ‚t| dƒd dks+J ‚t| dƒd dks6J ‚t| dƒd dksAJ ‚d S )	Né   é   é   é   r   ©r   r   ©r   r   é   )r
   r   ©ÚX© r#   ú[/var/www/auris/lib/python3.10/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J ‚ttdƒd dksJ ‚ttdƒd td ks)J ‚tttdƒd | ƒs5J ‚ttttƒd tƒsAJ ‚d S )Nr   ©ÚSumr   r   r   r   )Zsympy.concreter'   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J ‚t| dƒ ¡ |  ¡ ks"J ‚t| dƒ ¡ |  ¡ d ks1J ‚t| tƒ ¡ t| t d | t d g| t d | t d ggƒksTJ ‚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’J ‚||j| tj  }t
|d |d  |d |d   |d |d   ƒ}| ¡ t	|d | g|d | g|d | ggƒksÒJ ‚||j tj }t
|d |d  |d |d   |d |d   ƒ}||j  ¡ | }| ¡ |ksJ ‚| d }| d | d  | d | d   }t	| d | d  g| d  | d ggƒ| }| ¡ |ks9J ‚| | }| ¡ |  ¡ | ksJJ ‚d S )Nr"   r   r   r   r   r   )r   r   )r   r   Úar   ÚbÚc)r   r   éÿÿÿÿ)r	   r   Úas_explicitr
   r   r)   ÚTr   ÚHalfr   r   )	r"   r+   r,   r-   ÚexprÚmÚdenomÚexpectedZdetr#   r#   r$   Útest_as_explicit_symbol&   s4   þH484 ,r6   c                  C   sÆ   t ddgddggƒ} t| dƒ ¡ t tdƒƒksJ ‚t| dƒ ¡ | ks$J ‚t| dƒ ¡ | d ks1J ‚t| dƒ ¡ |  ¡ ks>J ‚t| dƒ ¡ |  ¡ d ksMJ ‚t dgƒ} t| tjƒ ¡ | tj ksaJ ‚d S )Nr   r   r   r   r   r.   éþÿÿÿ)r
   r   r/   r   Úinvr   r1   )r   r#   r#   r$   Útest_as_explicit_matrixI   s   
"r9   c                  C   s~   t tdƒ ¡ ttƒksJ ‚t tdƒ ¡ tksJ ‚t tdƒ ¡ tjks$J ‚dtjtjtfD ]} t t| ƒ ¡ t t| ƒks<J ‚q,d S )Nr   r   r.   r   )	r   r   Údoitr   r)   ÚIr   r1   Ú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sJ ‚tˆ dƒ ¡ ˆ ks$J ‚tˆ dƒ ¡ ˆ d ks1J ‚tˆ dƒ ¡ ˆ  ¡ ks>J ‚tˆ dƒ ¡ ˆ  ¡ d ksMJ ‚tt dgƒtjƒ ¡ t dgƒks_J ‚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                      ó   t ˆ dƒ ¡ S ©Nr.   ©r   r:   r#   r!   r#   r$   Ú<lambda>g   ó    z"test_doit_matrix.<locals>.<lambda>c                      r?   ©Nr7   rA   r#   r!   r#   r$   rB   h   rC   )	r
   r   r:   r   r8   r   r1   r   Ú
ValueErrorr#   r#   r!   r$   Útest_doit_matrix]   s   $rF   c                      sh   t dddƒ‰ tg d¢g d¢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   é   é   r.   r   r   c                      ó
   t ˆ ˆƒS ©N©r   r#   )r   r=   r#   r$   rB   o   ó   
 z test_nonsquare.<locals>.<lambda>c                      rI   rJ   rK   r#   )r   r=   r#   r$   rB   p   rL   )r	   r
   r   r1   r<   r)   r   r   r#   r#   )r   r   r=   r$   Útest_nonsquarek   s   þrM   c                  C   sB   t ddgddggƒ} t| tƒ ¡ | t   kr| ksJ ‚ J ‚d S )Nr   r   )r
   r   r)   r:   r!   r#   r#   r$   Útest_doit_equals_pows   s   .rN   c                  C   st   t ddgddggƒ} t ddgddggƒ}tt| |ƒdƒ ¡ | | d ks&J ‚tt| |ƒdƒ ¡ | | d ks8J ‚d S )Nr   r   r   r   rG   )r
   r   r   r:   r   )r"   ÚYr#   r#   r$   Útest_doit_nested_MatrixExprx   s   $(rP   c                  C   s®   t tƒ} t| dƒ ¡ | ksJ ‚t| tƒ ¡ | ksJ ‚t| dƒ ¡ | ks%J ‚t| dƒ ¡ | ks0J ‚t dƒ}t|tƒ ¡ |ks?J ‚t|dƒ ¡ |ksJJ ‚t|dƒ ¡ |ksUJ ‚d S )Nr   éýÿÿÿr   r   r.   )r   r)   r   r:   )ÚkÚlr#   r#   r$   Útest_identity_power   s   rT   c                      sì   t ttƒ‰ tˆ dƒ ¡ ˆ ksJ ‚tt‡ fdd„ƒ tˆ dƒ ¡ ttƒks&J ‚tˆ tƒ ¡ ˆ ks1J ‚tt‡ fdd„ƒ t ddƒ‰tˆtƒ ¡ ˆksJJ ‚tt‡fdd„ƒ tˆdƒ ¡ ˆks^J ‚tˆdƒ ¡ tdƒkskJ ‚tt‡fd	d„ƒ d S )
Nr   c                      r?   r@   rA   r#   ©Úz1r#   r$   rB   Ž   rC   z!test_zero_power.<locals>.<lambda>r   c                      r?   rD   rA   r#   rU   r#   r$   rB   ‘   rC   r   c                      r?   )NrQ   rA   r#   ©Úz2r#   r$   rB   ”   rC   r   c                      r?   r@   rA   r#   rW   r#   r$   rB   —   rC   )r   r)   r   r:   r   rE   r   r#   r#   )rV   rX   r$   Útest_zero_power‹   s   

rY   c                  C   sô   t ddƒ} | d tdƒksJ ‚| d | ksJ ‚| |  | d   kr(d|  ks+J ‚ J ‚| |  |  | d   kr>d|  ksAJ ‚ J ‚t ttƒ} | |  | d   krWt|  ksZJ ‚ J ‚t| td  |  ƒ| t   kruttd  |  ksxJ ‚ J ‚d S )Nr   r   r   r   é	   )r   r   r)   r   )Úor#   r#   r$   Útest_OneMatrix_powerš   s   
(,
(@r\   c                  C   sp  ddl m}  tt jd tt d j  kr!tjtj d ks$J ‚ J ‚tt jd jtt d ks4J ‚tjjjd td ksAJ ‚tjt jt ttt  ksQJ ‚tjt	j d jt	t d ksbJ ‚t	t jd jd t	t d kstJ ‚| | td td  ƒd ƒ 
¡ td td  d ksJ ‚tt d	 jd	 tt d
 jks¢J ‚tt t jt jtt tt  ks¶J ‚d S )Nr   )Ú	TransposerG   r    iùÿÿÿé#   r   r   éûÿÿÿé   )Z$sympy.matrices.expressions.transposer]   r   r   r0   r;   rS   rR   r   r   r:   )ZTPr#   r#   r$   Útest_transpose_power§   s   <  "$8$,ra   c                   C   sð   t ttdƒƒ ¡ ttƒksJ ‚t ttdƒƒ ¡ t tƒksJ ‚t ttdƒƒ ¡ ttdƒks.J ‚t ttdƒƒ ¡ tks;J ‚tt tƒdƒ ¡ ttƒksJJ ‚tt tƒdƒ ¡ t tƒksYJ ‚tt tƒdƒ ¡ ttdƒksiJ ‚tt tƒdƒ ¡ tksvJ ‚d S )Nr   r   r   r7   r.   )r   r   r   r:   r   r)   r#   r#   r#   r$   Útest_Inverse¸   s     rb   c                   C   sž   t d d t ks
J ‚t d d tt dƒksJ ‚t d d tt dƒks$J ‚t d d t ks.J ‚t d d d d	 tt d
ƒks?J ‚t t t t td  ksMJ ‚d S )Nr   r   r   rH   r7   rQ   r.   r   rG   éx   )r   r   r)   r#   r#   r#   r$   Útest_combine_powersÄ   s   " rd   c                   C   sz   t ttdƒsJ ‚t ttdƒsJ ‚t tttƒdƒsJ ‚t tttdƒdƒs%J ‚t tttdƒdƒs0J ‚t tttdƒdƒs;J ‚d S )Nr   r   r.   )r   r   r   r   r#   r#   r#   r$   Útest_unchangedÍ   s   re   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   ddt   S )Nr   r7   )r   r#   r#   r#   r$   rB   Ù   s    z(test_no_exponentiation.<locals>.<lambda>)r   ÚNotImplementedErrorr#   r#   r#   r$   Útest_no_exponentiationÖ   s   rg   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)   r3   rS   rR   r   r   r   r   r   r%   r*   r6   r9   r>   rF   rM   rN   rP   rT   rY   r\   ra   rb   rd   re   rg   r#   r#   r#   r$   Ú<module>   sB     		#		