U
    L?hd                     @   s  d dl Z d dl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mZ d d	lmZmZ d d
lmZmZmZmZ d dlmZmZmZmZm Z m!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S )    N)Permutation)
_af_invert)raises)diff)symbols)adjoint	conjugate	transpose)explog)cossin)ArrayImmutableDenseNDimArrayImmutableSparseNDimArrayMutableSparseNDimArray)tensorproducttensorcontractionderive_by_arraypermutedimsFlattentensordiagonalc                  C   s   ddl m}  ~ d S )Nr   	NDimArray)sympy.tensor.arrayr   r    r   W/var/www/html/venv/lib/python3.8/site-packages/sympy/tensor/array/tests/test_arrayop.pytest_import_NDimArray   s    r   c                  C   s~  t d\} }}}ddlm}m}m}m} t dks6tt| gt| gksNtt| g|gt| | ggksptt| g|g|gt| | | gggkstt| g|g|g|gt| | | | ggggkstt| | kstt| || | kstt| ||| | | kstt| |||| | | | ks:tt	t
fD ]}|| |g}	|dddg}
|||||g}t|	|
||||  ||  ||  ||  gd| |  d| |  d| |  d| |  gd| |  d| |  d| |  d| |  gg|| || || || gd| | d| | d| | d| | gd| | d| | d| | d| | gggksltt| |gdddgt|	|
kstt|	d|d|  d| gkstt|	dg|d|  gd| ggksttdg|	|d|  d| ggkstt||	|||  || gks*tt||	|
|||  d| |  d| |  g|| d| | d| | ggks|tt|	|
||||  d| |  d| |  g|| d| | d| | ggkstt|
||	|||  || gd| |  d| | gd| |  d| | ggksBtqBt
tfD ]J}|dddd	}|dddd	}t||t
dd
d
dddks.tq.d S )Nzx y z tr   )abcd            )r"   r$   )          )i i i[ i[ )r&   r'   r&   r'   )r   	sympy.abcr   r   r    r!   r   AssertionErrorr   r   r   r   )xyztr   r   r    r!   	ArrayTypeABCSparseArrayTyper   r   r   test_tensorproduct   s<    ",6$|p$$*($RRXr5   c                  C   sz  ddl m} m}m}m}m}m}m}m}m	}m
}	m}
m}m}m}m}m}m}m}m}m}m}m}m}m} ttdd}t|dtddgkstt| |||||||||	|
|||||||||||||gd}t|d	t| | || g|| || g|| |	| ggkstt|d
t| | || || gks6tt|dt| | || || g|| || || ggksvtd S )Nr   )r   r   r    r!   efghijklmnopqrsr/   uvwr,      )r#   r$   r$   r"   r#      '   )r#   r$   r#   r#   )r   r#   )r   r#   r$   r#   r$   )r*   r   r   r    r!   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r/   rE   rF   rG   r,   r   ranger   r+   )r   r   r    r!   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r/   rE   rF   rG   r,   r2   ZC1r   r   r   test_tensorcontraction?   s    h:B*rN   c                  C   s  ddl m} m}m}m}m}m} ||d  t| t| }t	|}t
|}t|g}	t||||d  t| t
||d  t| t|  | kstt||||gt|| | d| | |d  | || gkstt|	|||gt|| | gd| | |d  | g|| ggks(tt|||g||ggt|| | d| | |d  | g|| |t| | | ggkstt|	||g||ggt|| | gd| | |d  | gg|| g|t| | | gggkstt||g||gg||gtddgddggddgddgggks4tt||g||gg||g||ggtddgddggddgddgggddgddggddgddggggkstt||||d  t| t
||d  t| t|  | kstt|t|||gt|| | d| | |d  | || gks0tt|	t|||gt|| | gd| | |d  | g|| ggks~tt|t||g||ggt|| | d| | |d  | g|| |t| | | ggkstt|	t||g||ggt|| | gd| | |d  | gg|| g|t| | | gggksNttt||g||ggt||gtddgddggddgddgggksttt||g||ggt||g||ggtddgddggddgddgggddgddggddgddggggkstttfD ]X}
t| |dd}t|| tddidksHtt|| |ftddddkstqt|||g}d}t||tdddgkstd S )	Nr   )r:   r;   r/   r,   r-   r.   r#   r"   r   r"   '   N  )r   i)r#   rQ   rR   )r*   r:   r;   r/   r,   r-   r.   r
   r   r   r   r   r   r+   r   r   r   r   )r:   r;   r/   r,   r-   r.   ZbexprZsexprZcexprr   r4   r   UEr   r   r   test_derivative_by_arrayJ   s<     
FBJ`hD@HHNdlLH(rU   c               	   C   s,  t ddg} t ddgddgg}t|| || }t|ddt ddgddggksRttd}t |ddddddg}t|d	d
d|d |d  |d  |d  |d  |d  |d  |d  |d  |d  |d  |d  kstt|dd
|d |d  |d  |d  |d  |d  ks$tt|d	dt |d |d  |d  |d  |d |d  |d  |d  |d |d  |d  |d  g|d |d  |d   |d!  |d |d  |d  |d  |d" |d#  |d$  |d%  g|d& |d'  |d(  |d)  |d* |d+  |d,  |d-  |d |d  |d  |d  ggksRtt|d	d
t |d |d  |d  |d  |d  |d  |d |d.  |d/  |d0  |d1  |d2  g|d3 |d4  |d5  |d6  |d  |d7  |d |d  |d  |d  |d  |d  ggks(td S )8Nr   r"   rI   )r%      a0:144r#   r$   rO   rL   l   o   |            r)          #   )r   r"   r%   rW   p   s   r%         t   w   r(   rJ   x   {                                          m   }         !   n   ~      rH   "   )r   r   r   r+   r   )ZuaZFaposar   r   r   )test_issue_emerged_while_discussing_10972s   s,    $rBH <j^r   c                     sL  t d} ttfD ]}|| d d d t dt ks>t  jt d ksZt  jt  kstt  jt	  kst  j
t  kst  j   kst  j 	  kst  j
   ksttt fdd tt fdd tt fdd d}d	d
 t|D }dd
 tt| D }|||}tt|}t| tt||t||kstt||jtt||kst|dddd}t|djdkstt|ddddgjdkstt|tddddgjdkst|| ddddddgttfdd ttfdd ttfdd ttt || d | d g| d | d gg| d | d g| d | d gg| d | d  g| d! | d" ggg| d | d# g| d$ | d% gg| d& | d' g| d( | d) gg| d* | d+ g| d, | d- ggg| d. | d/ g| d0 | d1 gg| d2 | d3 g| d4 | d5 gg| d6 | d7 g| d8 | d9 gggg| d | d: g| d; | d< gg| d= | d> g| d? | d@ gg| dA | dB g| dC | dD ggg| d | dE g| dF | dG gg| dH | dI g| dJ | dK gg| dL | dM g| dN | dO ggg| dP | dQ g| dR | dS gg| dT | dU g| dV | dW gg| dX | dY g| dZ | d[ ggggg| d | d\ g| d] | d^ gg| d_ | d` g| da | db gg| dc | dd g| de | df ggg| d | dg g| dh | di gg| dj | dk g| dl | dm gg| dn | do g| dp | dq ggg| dr | ds g| dt | du gg| dv | dw g| dx | dy gg| dz | d{ g| d| | d} gggg| d | d~ g| d | d gg| d | d g| d | d gg| d | d g| d | d ggg| d | d g| d | d gg| d | d g| d | d gg| d | d g| d | d ggg| d | d g| d | d gg| d | d g| d | d gg| d | d g| d | d ggggggksttd|| d | d g| d | d gg| d | d g| d | d gg| d. | dr g| dP | d ggg| d | d_ g| d= | d gg| d& | dj g| dH | d gg| d2 | dv g| dT | d ggg| d | dc g| dA | d gg| d* | dn g| dL | d gg| d6 | dz g| dX | d gggg| d | d\ g| d: | d~ gg| d# | dg g| dE | d gg| d/ | ds g| dQ | d ggg| d | d` g| d> | d gg| d' | dk g| dI | d gg| d3 | dw g| dU | d ggg| d  | dd g| dB | d gg| d+ | do g| dM | d gg| d7 | d{ g| dY | d ggggg| d | d] g| d; | d gg| d$ | dh g| dF | d gg| d0 | dt g| dR | d ggg| d | da g| d? | d gg| d( | dl g| dJ | d gg| d4 | dx g| dV | d ggg| d! | de g| dC | d gg| d, | dp g| dN | d gg| d8 | d| g| dZ | d gggg| d | d^ g| d< | d gg| d% | di g| dG | d gg| d1 | du g| dS | d ggg| d | db g| d@ | d gg| d) | dm g| dK | d gg| d5 | dy g| dW | d ggg| d" | df g| dD | d gg| d- | dq g| dO | d gg| d9 | d} g| d[ | d ggggggks^ttd|| d | d g| d | d g| d. | dr gg| d | d g| d | d g| dP | d ggg| d | d] g| d$ | dh g| d0 | dt gg| d; | d g| dF | d g| dR | d gggg| d | d_ g| d& | dj g| d2 | dv gg| d= | d g| dH | d g| dT | d ggg| d | da g| d( | dl g| d4 | dx gg| d? | d g| dJ | d g| dV | d gggg| d | dc g| d* | dn g| d6 | dz gg| dA | d g| dL | d g| dX | d ggg| d! | de g| d, | dp g| d8 | d| gg| dC | d g| dN | d g| dZ | d ggggg| d | d\ g| d# | dg g| d/ | ds gg| d: | d~ g| dE | d g| dQ | d ggg| d | d^ g| d% | di g| d1 | du gg| d< | d g| dG | d g| dS | d gggg| d | d` g| d' | dk g| d3 | dw gg| d> | d g| dI | d g| dU | d ggg| d | db g| d) | dm g| d5 | dy gg| d@ | d g| dK | d g| dW | d gggg| d  | dd g| d+ | do g| d7 | d{ gg| dB | d g| dM | d g| dY | d ggg| d" | df g| d- | dq g| d9 | d} gg| dD | d g| dO | d g| d[ | d ggggggkstddrdd}||| d | d g| d | d gg| d | d g| d | d gg| d. | dr g| dP | d gg| d | d_ g| d= | d gg| d& | dj g| dH | d gg| d2 | dv g| dT | d gg| d | dc g| dA | d gg| d* | dn g| dL | d gg| d6 | dz g| dX | d ggg	| d | d] g| d; | d gg| d$ | dh g| dF | d gg| d0 | dt g| dR | d gg| d | da g| d? | d gg| d( | dl g| dJ | d gg| d4 | dx g| dV | d gg| d! | de g| dC | d gg| d, | dp g| dN | d gg| d8 | d| g| dZ | d ggg	| d | d\ g| d: | d~ gg| d# | dg g| dE | d gg| d/ | ds g| dQ | d gg| d | d` g| d> | d gg| d' | dk g| dI | d gg| d3 | dw g| dU | d gg| d  | dd g| dB | d gg| d+ | do g| dM | d gg| d7 | d{ g| dY | d ggg	| d | d^ g| d< | d gg| d% | di g| dG | d gg| d1 | du g| dS | d gg| d | db g| d@ | d gg| d) | dm g| dK | d gg| d5 | dy g| dW | d gg| d" | df g| dD | d gg| d- | dq g| dO | d gg| d9 | d} g| d[ | d ggg	gks tt|d|| d | d | d. | d | d& | d2 | d | d* | d6 g	| d | d$ | d0 | d | d( | d4 | d! | d, | d8 g	| d | d# | d/ | d | d' | d3 | d  | d+ | d7 g	| d | d% | d1 | d | d) | d5 | d" | d- | d9 g	g| d | d | dP | d= | dH | dT | dA | dL | dX g	| d; | dF | dR | d? | dJ | dV | dC | dN | dZ g	| d: | dE | dQ | d> | dI | dU | dB | dM | dY g	| d< | dG | dS | d@ | dK | dW | dD | dO | d[ g	gg| d | d | dr | d_ | dj | dv | dc | dn | dz g	| d] | dh | dt | da | dl | dx | de | dp | d| g	| d\ | dg | ds | d` | dk | dw | dd | do | d{ g	| d^ | di | du | db | dm | dy | df | dq | d} g	g| d | d | d | d | d | d | d | d | d g	| d | d | d | d | d | d | d | d | d g	| d~ | d | d | d | d | d | d | d | d g	| d | d | d | d | d | d | d | d | d g	gggkstqttfD ]x}	|	dddd}
t|
d|
kstt|
d|	ddddkst|	dddd}| |	ddddksDtqd S )NrX      rL   )r"   r   c                      s
   t  dS )N)r   r   r   m1r   r   <lambda>       z(test_array_permutedims.<locals>.<lambda>c                      s
   t  dS )N)r   r   r   r   r   r   r   r      r   c                      s
   t  dS )N)r"   r#   r   r   r   r   r   r   r      r   c                 S   s   g | ]}t d dqS )r"   rW   )randomrandint.0r:   r   r   r   
<listcomp>   s     z*test_array_permutedims.<locals>.<listcomp>c                 S   s   g | ]}t   qS r   )r   r   r   r   r   r      s     r%   rW   rd   )r#   r$   r"   r   )r   rd   rW   r%   r#   r$   r"   r   c                      s
   t  dS )N)r"   r"   r   r   r   r   r   r      r   c                      s      S N)r	   r   r   r   r   r      r   c                      s      S r   )r   r   r   r   r   r      r   H   $   rY   rJ   T   0   rh   rq   `   <   ro   L   (   rb   r)   X   4   r[   ru   d   @   rs   r(   P   ,   rf   rm   \   8   rk   r`   h   D   r]   J   &   r|      V   2   z      b   >      N   *   r   rH   Z   6   r}      f   B      
   R   .   v      ^   :      r   j   F   r~   I   %   rw      U   1   y      a   =      M   )   q   rz   Y   5   rx      e   A      	   Q   -   u      ]   9      r{   i   E   ry   K   rK   rZ   rj   W   3   ri   rr   c   ?   rp   O   +   rc   r_   [   7   r\   rv   g   C   rt   re   S   /   rg   rn   _   ;   rl   ra   k   G   r^   )r"   r   r#   r$   r%   rW   )r   r#   r"   r%   r$   rW   )r$   r#   r   r"   )r"   rQ   )rQ   rR   rQ   )r   r"   r#   )r"   r   r#   )r"   i )rR   rQ   rQ   )r"   rR   rP   )rQ   r"   )rR   rQ   )r   r   r   r   r	   r+   ZtomatrixTr3   r   Hr   r   
ValueErrorrM   r   listr   shuffler   shapetupler   ZzerosreversedZrankreshaper   )r   r0   Zdimsr   Zelemsrapermr.   Zpo2r4   r1   r2   r   )r   r   r   test_array_permutedims   s   

""B$ $ $ $ 	$ $#
P2 2 2+
N2 "2 "2 "2"2"2"    V    r   c                     sz  t tdddddd td} td}t | |d}ttdtdtdtdtdD ]6\}}}}}||||||f  |||||f ks^tq^td}t | |d}ttdtdtdtdtdD ]6\}}}}}||||||f  |||||f kstqtt	 fdd tt	 fd	d tt	 fd
d tt	 fdd tt	 fdd tt	 fdd d S )Nr`   r#   abcdeZebdac)index_order_newindex_order_oldZcabedc                      s   t  tdtddS )NZaacder   r   r   r   r   r   r1   r   r   r   <  r   z/test_permutedims_with_indices.<locals>.<lambda>c                      s   t  tdtddS )Nr   Zabccer   r   r   r   r   r   r   =  r   c                      s   t  tdtddS )Nr   abcer   r   r   r   r   r   r   >  r   c                      s   t  tdtddS )Nr   r   r   r   r   r   r   r   ?  r   c                      s   t  dddddgtddS )Nr#   r"   r   r$   r%   r   )r   r   r   r   r   r   r   @  r   c                      s   t  dddddgtddS )Nr#   r"   r   r$   r%   r   )r   r   r   r   r   r   r   A  r   )
r   rM   r   r   r   	itertoolsproductr+   r   r   )Zindices_newZindices_oldZnew_Ar   r   r    r!   r6   r   r   r   test_permutedims_with_indices1  s     4*4*r  c                  C   s   ddl m}  tt| fD ]~}|tddd}tt|dddddd	dd
ddddddddddddddddgksrtt	t|D ]\}}||ks~tq~qd S )Nr   )Matrixrq   r%   r   r"   r#   r$   rW   rd   r(   r   r   re   rJ   r   r   rj   r)   rz   rH   r_   rm   r   r   rn   )
sympy.matrices.denser  r   r   rM   r   r   r   r+   	enumerate)r  r0   r1   r:   rF   r   r   r   test_flattenD  s    Dr  c                     s  ddl m}  ttddd tt fdd tt fdd t| dddgtdddgkshtt ddgtdd	d
gkstt	d\}}}t
|||g }t|ddgtdd	| d
| gdd	| d
| gdd	| d
| ggkstt|ddgtdd| d| g|d	| d| gd| d| d
| ggks@tt|dddgtdd	| d
| gksltt	d\}}}}}	}
t
|||gdddg|||g||	|
gtddddgt|| | d| | |	 d| | |
 gksttddgddgt
|d| d| g|| ||	 ||
 gks0tttddgddgt
|| ||	 ||
 g|d| d| gksxtttdd  ttfdd d S )Nr   )eyer   r$   c                      s   t  dgdgS )Nr   r"   r   r   exprr   r   r   Q  r   z%test_tensordiagonal.<locals>.<lambda>c                      s   t  ddgS )Nr   r  r   r	  r   r   r   R  r   r"   r%   r(   zx y zr#   r   rd   rW   za b c X Y Zc                   S   s   t dddgdddggddgS )Nr"   r#   r$   r%   rW   r   r   r  r   r   r   r   r   h  r   c                      s   t  dddddgS )Nr$   r   r"   r#   )r   r   r   )expr3r   r   r   i  r   )r  r  r   rM   r   r   r   r   r+   r   r   )r  r,   r-   r.   Zexpr2r   r   r    XYZr   )r
  r  r   test_tensordiagonalN  s$    $ JP,&FDHr  )+r   r   Zsympy.combinatoricsr   Z sympy.combinatorics.permutationsr   Zsympy.testing.pytestr   Zsympy.core.functionr   Zsympy.core.symbolr   Z$sympy.functions.elementary.complexesr   r   r	   Z&sympy.functions.elementary.exponentialr
   r   Z(sympy.functions.elementary.trigonometricr   r   r   r   r   r   r   Zsympy.tensor.array.arrayopr   r   r   r   r   r   r   r5   rN   rU   r   r   r  r  r  r   r   r   r   <module>   s*    ') ,
