U
    -e/                     @   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 o/var/www/html/Darija-Ai-Train/env/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
st|jd
 d
d  |jd
 d
d  kst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sn t|d |d   krd	ksn tt||g||gg}| | kstt| |g|| gg}| td
st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st|ttf |d kst|tt d df t|tt d dkst|dtt d f t|dtt d kst|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st|tt d tt	 d f t|tt d tt	 d kst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st|
|| d df ||d df kst|
d| | d f |d|d f kst|
|| 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st|
d| d|  f |	|| f kst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st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stt	
|| ||kst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stt	
|| ||kst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stt	
|| ||kst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st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st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st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st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stt	| | f ||  f  || |f  | dtd ft ||j | kst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stt	|  f  dtd ftd t|kst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st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st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   

.