U
    ZÊ¹j/  ã                   @   sü  d dl mZ d dlmZmZ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mZmZ d d	lmZ d d
lmZmZmZ d dlmZmZ d dlmZ d dlm Z  d dl!m"Z"m#Z# eddd�\Z$Z%Z&Z'eddd�\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.ede&e&ƒZ/ede&e&ƒZ0ede&e&ƒZ1edddƒZ2edddƒZ3edddƒZ4edddƒZ5d d!„ Z6d"d#„ Z7d$d%„ Z8d&d'„ Z9d(d)„ Z:d*d+„ Z;d,d-„ Z<d.d/„ Z=d0d1„ Z>d2d3„ Z?e"d4d5„ ƒZ@d6d7„ ZAd8d9„ ZBd:d;„ ZCd<d=„ ZDd>S )?é    )ÚSum)ÚsymbolsÚSymbolÚDummy)Úsqrt)ÚKroneckerDelta)Úeye)ÚBlockMatrix)ÚHadamardPower)ÚMatrixSymbolÚ
MatrixExprÚMatrixElement)ÚMatPow)Ú
ZeroMatrixÚIdentityÚ	OneMatrix)ÚTraceÚtrace)ÚImmutableMatrix)ÚArrayTensorProduct)ÚXFAILÚraisesúk l m nT)Úintegerúi jÚWÚXÚYÚZÚX1ÚX2ÚX3ÚX4ÚAé   ÚBÚxé   c                      s.   t d ‰ t‡ fdd„ddt jfD ƒƒs*t‚d S )N)r'   r$   c                 3   s   | ]}|t ˆ ƒkV  qd S ©N)Ústr)Ú.0Ús©Zx12© úm/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/matrices/expressions/tests/test_indexing.pyÚ	<genexpr>'   s     z)test_symbolic_indexing.<locals>.<genexpr>Ú1Ú2)r   ÚallÚnameÚAssertionErrorr-   r-   r,   r.   Útest_symbolic_indexing%   s    r5   c                   C   s0   t t ttf t ttf tttf  ks,t‚d S r(   )r   r   ÚiÚjr4   r-   r-   r-   r.   Útest_add_index,   s    r8   c                  C   sä   t t d t d td  t d td   ks0t‚t t  ¡ t  ¡ t ¡  ksPt‚tdttƒ} tdttƒ}| | d }t	| dt
f |t
df  t
d	td
 fƒ}|jd	  |jd	 t
¡s¸t‚|jd
 d
d … |jd
 d
d … ksàt‚d S )N©r   r   ©r   r'   ©r'   r   r   r   )é   r$   r<   r$   r   r'   )r#   Úyr4   r%   Z
as_mutabler   ÚnÚmÚkr   r6   ÚargsZdummy_eq)r   r   ÚresultÚexpectedr-   r-   r.   Útest_mul_index0   s    0 (rD   c               	   C   sp  t tdƒ} | d td d td td   ks2t‚tdƒ}t| }|d dttd td  d dtd  td   dtd  td   ƒ d td d  td d  |  td  td  ttd d dtd  td   dtd  td   td d  ƒtd  td  ttd d dtd  td   dtd  td   td d  ƒ  dttd td  d dtd  td   dtd  td   ƒd td d  td d  |  td  td  ttd d dtd  td   dtd  td   td d  ƒ td  td  ttd d dtd  td   dtd  td   td d  ƒ   k�slt‚d S )Nr$   r9   r:   r;   r>   ©r'   r'   r<   )r   r#   r4   r   r   )ÚQr>   ZQ2r-   r-   r.   Útest_pow_index<   sr    
((ÿÿ
ÿ
ÿýüü4
ÿÿÿBþû(ÿÿ
ÿ
ÿýýý4
ÿÿÿBþüørG   c                   C   s"   t jttf t ttf kst‚d S r(   )r   ÚTr6   r7   r4   r-   r-   r-   r.   Útest_transpose_indexS   s    rI   c                      s”   t dƒ‰ ˆ d ˆ d   kr2ˆ d   kr2dks8n t‚ˆ d ˆ d   krbˆ d   krbd	kshn t‚ˆ td	f jd
ks~t‚tt‡ fdd„ƒ d S )Né   r9   rE   )r$   r$   r'   r;   r:   )r$   r'   r   )r   r$   c                      s   ˆ d S )N©rJ   rJ   r-   r-   ©ÚIr-   r.   Ú<lambda>\   ó    z%test_Identity_index.<locals>.<lambda>)r   r4   r6   Zdelta_ranger   Ú
IndexErrorr-   r-   rL   r.   Útest_Identity_indexW   s
    00rQ   c                  C   sü   t dƒ} tddƒ}t| | g| | ggƒ}ttdƒƒ}t||g||ggƒ}|d |d   kr~|d   kr~|d   kr~dks„n t‚|d |d   kr d	ks¦n t‚t||g||ggƒ}| ¡ | ¡ ksÎt‚t| |g|| ggƒ}| ¡  td
ƒ¡søt‚d S )NrJ   r9   )rJ   r   )r   rJ   rK   r'   )r<   rJ   )é   r'   r   é   )r   r   r	   r   r   r4   Úas_explicitÚequals)rM   r   r%   Ze3ÚBBZBIr-   r-   r.   Útest_block_index_   s    
>"rW   c                  C   sÄ  t dttƒ} t dttƒ}t dttƒ}t dttƒ}t| |g||ggƒ}|d t|ddƒks\t‚|td td f | td td f ksˆt‚|ttf |d ks t‚|tt d df t|tt d dƒksÌt‚|dtt d f t|dtt d ƒksøt‚|tt d tt d f t|tt d tt d ƒk�s6t‚|tt	f t|tt	ƒk�sTt‚|tt tt	 f t|tt tt	 ƒk�s‚t‚|tt d tt	 d f t|tt d tt	 d ƒk�sÀt‚d S )NÚA1ÚA2ÚA3ÚA4r9   r   r'   )
r   r>   r@   Úlr?   r	   r   r4   r6   r7   )rX   rY   rZ   r[   r#   r-   r-   r.   Útest_block_index_symbolicp   s    ,,,>.r]   c                  C   s²  t dddd�\} }}}t dddd�\}}td|| ƒ}td||ƒ}td|| ƒ}td	||ƒ}	t||g||	ggƒ}
|
d
 |d
 ks€t‚|
|| d df ||d df ks¨t‚|
d| | d f |d|d f ksÐt‚|
|| d | | d f |	|d |d f k�st‚|
||f t|
||ƒk�s$t‚|
|| | | f |	||f k�sJt‚|
|| d | | d f ||| d | | d f k�sˆt‚|
d| d|  f |	|| f k�s®t‚d S )Nr   T©r   Zpositiver   ©r   ZnonnegativerX   rY   rZ   r[   r9   r'   r   r$   )r   r   r	   r4   r   )r@   r\   r?   r>   r6   r7   rX   rY   rZ   r[   r#   r-   r-   r.   Ú!test_block_index_symbolic_nonzeroƒ   s    ((6&>r`   c                  C   sÞ   t dddd�\} }}t dddd�}td| | ƒ}td| |ƒ}td| |ƒ}td	|| ƒ}td
||ƒ}td||ƒ}	td|| ƒ}
td||ƒ}td||ƒ}t|||g|||	g|
||ggƒ}|| | | | f t|| | | | ƒksÚt‚d S )Nzn m kTr^   r6   r_   rX   rY   rZ   r[   ÚA5ÚA6ÚA7ÚA8ÚA9)r   r   r	   r   r4   )r>   r?   r@   r6   rX   rY   rZ   r[   ra   rb   rc   rd   re   r#   r-   r-   r.   Útest_block_index_large—   s     rf   c                  C   sL   t dtdƒ} t dtdƒ}t| g|ggƒ}|dt df |tdf ksHt‚d S )NrX   r'   rY   r$   r   )r   r>   r?   r	   r4   )rX   rY   r#   r-   r-   r.   Útest_block_index_symbolic_fail§   s    rg   c                   C   s   t  ¡ dd d …f  d S )Nr   )r#   rT   r-   r-   r-   r.   Útest_slicing²   s    rh   c                   C   s    t tdd„ ƒ t tdd„ ƒ d S )Nc                   S   s   t dƒd S )Nr$   )r'   r$   rJ   r<   rR   ©r   r-   r-   r-   r.   rN   ·   rO   ztest_errors.<locals>.<lambda>c                   S   s   t dƒdddddg S )Nr$   r'   rJ   r<   rR   ri   r-   r-   r-   r.   rN   ¸   rO   )r   rP   r-   r-   r-   r.   Útest_errors¶   s    rj   c               
   C   sþ  t dƒ\} }t dƒ\}}}dd„ }tt t }|| | |¡ƒtt| |f t||f  t||f  |dtd f|dtd fƒks‚t‚t	 
| | |¡¡|ksœt‚tjtj tj }|| | |¡ƒtt||f t||f  t|| f  |dtd f|dtd fƒk�st‚t	 
| | |¡| ¡|k�s"t‚tt t tt t  }|| | |¡ƒtt| |f t||f  t||f  |dtd f|dtd fƒtt| |f t||f  t||f  |dtd f|dtd fƒ k�sÐt‚t	 
| | |¡¡|k�sìt‚dt t t dt t t  }|| | |¡ƒdtt| |f t||f  t||f  |dtd f|dtd fƒ dtt| |f t||f  t||f  |dtd f|dtd fƒ  k�sªt‚t	 
| | |¡¡|k�sÆt‚ttt  t }|| | |¡ƒtt| |f t||f t||f   t||f  |dtd f|dtd fƒk�s8t‚t	 
| | |¡¡|k�sTt‚ttd  t }tt tt  t }|| | |¡ƒttt| |f t||f  |dtd fƒtt||f t| |f  |dtd fƒ t||f  |dtd fƒk�sút‚d S )	Nzi, jzi_1:4c                 S   s   dd„ |   t¡D ƒ}|  |¡S )Nc                 S   s   i | ]}|t |jƒ“qS r-   )r   r3   )r*   r6   r-   r-   r.   Ú
<dictcomp>À   s      zNtest_matrix_expression_to_indices.<locals>.replace_dummies.<locals>.<dictcomp>)Zatomsr   Zxreplace)ÚexprÚreplr-   r-   r.   Úreplace_dummies¿   s    z:test_matrix_expression_to_indices.<locals>.replace_dummiesr   r'   r$   rJ   )r   r   r   r   Z_entryr   r\   r?   r4   r   Úfrom_index_summationrH   r   r#   r%   r   r    r!   )r6   r7   Úi1Úi2Úi3rn   rl   r-   r-   r.   Ú!test_matrix_expression_to_indices»   sR    >ÿ>ÿ
>>ÿÿ
 BBÿÿ
Jÿ
Rÿÿÿrs   c                     s¤  ddl m‰ m} m}m} tdttƒ}tdttƒ}tdttƒ}tdtdƒ}tdtd	�\}}}	}
}t	t
ˆ | f t| |f  t||f  | dtd f|dtd fƒ‰t ˆˆ ¡t
t t ksºt‚t	t
j| ˆ f t| |f  t||f  | dtd f|dtd fƒ‰t ˆˆ ¡t
t t k�st‚t	|| ˆ f || |f  |||f  | dtd f|dtd fƒ‰t ˆˆ ¡|j| | k�szt‚t	|| ˆ f ||| f  |||f  | dtd f|dtd fƒ‰t ˆˆ ¡|j|j | k�sÜt‚t	|||f || ˆ f  ||| f  | dtd f|dtd fƒ‰t ˆˆ ¡|j|j | k�s>t‚t	|ˆ | f |ˆ | f  ˆ dtd f| dtd fƒ‰t ˆˆ ¡tdtƒ| ttdƒ tdtƒ| ttdƒ  k�s´t‚t	|ˆ | f d
 ˆ dtd f| dtd fƒ‰t ˆˆ ¡t||j ƒk�s t‚t	|ˆ | f d ˆ dtd f| dtd fƒ‰t ˆˆ ¡tt|jd
ƒ| ƒk�sRt‚t	|ˆ | f |ˆ | f  || |f  | dtd fƒ‰t ˆˆ ¡|| | k�s¤t‚t	|ˆ | f || ˆ f  || |f  | dtd fƒ‰t ˆˆ ¡||j | k�søt‚t	|ˆ | f || |f  |||f  | dtd f|dtd fƒ‰t ˆˆ ¡|d k�sRt‚t	|ˆ | f || |f  |||f  | dtd f|dtd fƒ‰t ˆˆ ¡|d
 | k�s°t‚t	|ˆ ˆ f ˆ dtd fƒ‰t ˆd ¡t|ƒk�sæt‚t	|ˆ ˆ f || |f  |||f  ˆ dtd f|dtd fƒ‰t ˆ| ¡t|ƒ| | k�sHt‚t	t
ˆ | f t| |f  t||f  | dtd f|dtfƒ‰tt‡ ‡fdd„ƒ t	t
ˆ | f t| |f  t||f  | dtd f|dtd fƒ‰tt‡ ‡fdd„ƒ t	|ˆ | f t	|| |f |||f  |dtd fƒ | dtd fƒ‰t ˆˆ ¡|| | k�sNt‚t	|ˆ | f t| |ƒ |||f  | dtd f|dtd fƒ‰t ˆˆ ¡|| k�s¦t‚t	t|tƒt|	tƒ |t|f  |t|	f  |dtd f|	dtd fƒ‰t ˆt¡t|j|ƒk�st‚t	|||	f ||	df  |	dtd fƒ‰t ˆ|¡t|| |dƒk�sVt‚t	|||	f ||	df  |	dtd fƒ‰t ˆ|¡t|| |dƒk�s t‚d S )Nr   )ÚaÚbÚcÚdr#   r%   ÚCÚw1r'   zi0:5)Úclsr$   rJ   c                      s   t  ˆˆ ¡S r(   ©r   ro   r-   ©rt   rl   r-   r.   rN     rO   z=test_matrix_expression_from_index_summation.<locals>.<lambda>c                      s   t  ˆˆ ¡S r(   r{   r-   r|   r-   r.   rN     rO   )Z	sympy.abcrt   ru   rv   rw   r   r@   r   r   r   r   r   r   r\   r?   r   ro   r4   rH   r   r   r
   r   r   Ú
ValueErrorr   r>   r6   r7   r   r   )ru   rv   rw   r#   r%   rx   ry   Zi0rp   rq   rr   Úi4r-   r|   r.   Ú+test_matrix_expression_from_index_summationé   s`    @B@ @"@"4B, ,&44 @@@"<@D>H("(r   N)EZsympy.concrete.summationsr   Zsympy.core.symbolr   r   r   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.special.tensor_functionsr   Zsympy.matrices.denser   Z&sympy.matrices.expressions.blockmatrixr	   Z#sympy.matrices.expressions.hadamardr
   Z"sympy.matrices.expressions.matexprr   r   r   Z!sympy.matrices.expressions.matpowr   Z"sympy.matrices.expressions.specialr   r   r   Z sympy.matrices.expressions.tracer   r   Zsympy.matrices.immutabler   Z0sympy.tensor.array.expressions.array_expressionsr   Zsympy.testing.pytestr   r   r@   r\   r?   r>   r6   r7   r   r   r   r   r   r    r!   r"   r#   r%   r&   r=   r5   r8   rD   rG   rI   rQ   rW   r]   r`   rf   rg   rh   rj   rs   r   r-   r-   r-   r.   Ú<module>   sV   

.