o
    ś»Ī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#   śr/home/www/facesmatcher.com/frenv_anti/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sJ 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     		#		