o
    GZhd                     @   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   T/var/www/auris/lib/python3.10/site-packages/sympy/tensor/array/tests/test_arrayop.pytest_import_NDimArray   s   r   c                  C   st  t d\} }}}ddlm}m}m}m} t dksJ t| gt| gks'J t| g|gt| | ggks8J t| g|g|gt| | | gggksNJ t| g|g|g|gt| | | | ggggksiJ t| | ksqJ t| || | ks|J t| ||| | | ksJ t| |||| | | | ksJ tt	fD ]m}|| |g}	|g d}
|||||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s3J t| |gg dt|	|
ksDJ t|	d|d|  d| gksVJ t|	dg|d|  gd| ggkskJ tdg|	|d|  d| ggksJ t||	|||  || gksJ t||	|
|||  d| |  d| |  g|| d| | d| | ggksJ t|	|
||||  d| |  d| |  g|| d| | d| | ggksJ t|
||	|||  || gd| |  d| | gd| |  d| | ggksJ qt	t
fD ]%}|ddd	d
}|ddd	d
}t||t	ddddddks6J qd S )Nzx y z tr   )abcd   r"         r$   r%      )r"   r%   )          )i i i[ i[ )r'   r(   r'   r(   )r   	sympy.abcr   r   r    r!   r   r   r   r   r   )xyztr   r   r    r!   	ArrayTypeABCSparseArrayTyper   r   r   test_tensorproduct   s>   ",6"|p"$*($RRV(r5   c                  C   st  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sHJ t| |||||||||	|
|||||||||||||gd}t|d	t| | || g|| || g|| |	| ggksJ t|d
t| | || || gksJ t|dt| | || || g|| || || ggksJ 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!   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sNJ t||||gt|| | d| | |d  | || gksoJ t|	|||gt|| | gd| | |d  | g|| ggksJ t|||g||ggt|| | d| | |d  | g|| |t| | | ggksJ t|	||g||ggt|| | gd| | |d  | gg|| g|t| | | gggksJ t||g||gg||gtddgddggddgddgggksJ 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sMJ t||||d  t| t
||d  t| t|  | ksqJ t|t|||gt|| | d| | |d  | || gksJ t|	t|||gt|| | gd| | |d  | g|| ggksJ t|t||g||ggt|| | d| | |d  | g|| |t| | | ggksJ t|	t||g||ggt|| | gd| | |d  | gg|| g|t| | | gggks$J tt||g||ggt||gtddgddggddgddgggksJJ 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sJ ttfD ],}
t| |dd}t|| tddidksJ t|| |ftddddksJ qt|||g}d}t||tg d	ksJ 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,   r-   r.   ZbexprZsexprZcexprr   r4   r   UEr   r   r   test_derivative_by_arrayJ   s<    
FBH^f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s)J td}t |g d}t|dd	d|d |d
  |d  |d  |d  |d  |d  |d  |d  |d  |d  |d  ksmJ t|dd	|d |d  |d  |d  |d  |d  ksJ 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s$J t|dd	t |d |d
  |d  |d  |d  |d  |d |d.  |d/  |d0  |d1  |d2  g|d3 |d4  |d5  |d6  |d7  |d8  |d |d  |d  |d  |d  |d  ggksJ d S )9Nr   r"   rI   )r&      a0:144r$   r$   r%   r%   r$   r$   rO   rL   l   o   |            r*      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@H<<j^r   c                     s4  t d} ttfD ]}|| d d d t dt ksJ   jt d ks-J   jt  ks:J   jt  ksGJ   j	t
  ksTJ   j   ksaJ   j   ksnJ   j	 
  ks{J 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sJ t||jtt||ksJ |dddd}t|djdksJ t|g djdksJ t|tg djdksJ || g d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| d. | d/ gg| d0 | d1 g| d2 | d3 gg| d4 | d5 g| d6 | d7 gggg| d8 | d9 g| d: | d; gg| d< | d= g| d> | d? gg| d@ | dA g| dB | dC ggg| d | dD g| dE | dF gg| dG | dH g| dI | dJ gg| dK | dL g| dM | dN ggg| dO | dP g| dQ | dR gg| dS | dT g| dU | dV gg| dW | dX g| dY | dZ 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siJ td|| d | d[ g| d8 | d~ gg| d | d g| d | d gg| d, | dr g| dO | d ggg| d | d_ g| d< | d gg| d$ | dj g| dG | d gg| d0 | dv g| dS | d ggg| d | dc g| d@ | d gg| d( | dn g| dK | d gg| d4 | dz g| dW | d gggg| d | d\ g| d9 | d gg| d! | dg g| dD | d gg| d- | ds g| dP | d ggg| d | d` g| d= | d gg| d% | dk g| dH | d gg| d1 | dw g| dT | d ggg| d | dd g| dA | d gg| d) | do g| dL | d gg| d5 | d{ g| dX | d ggggg| d | d] g| d: | d gg| d" | dh g| dE | d gg| d. | dt g| dQ | d ggg| d | da g| d> | d gg| d& | dl g| dI | d gg| d2 | dx g| dU | d ggg| d | de g| dB | d gg| d* | dp g| dM | d gg| d6 | d| g| dY | d gggg| d | d^ g| d; | d gg| d# | di g| dF | d gg| d/ | du g| dR | d ggg| d | db g| d? | d gg| d' | dm g| dJ | d gg| d3 | dy g| dV | d ggg| d  | df g| dC | d gg| d+ | dq g| dN | d gg| d7 | d} g| dZ | d ggggggksJ td|| d | d[ g| d | d g| d, | dr gg| d8 | d~ g| d | d g| dO | d ggg| d | d] g| d" | dh g| d. | dt gg| d: | d g| dE | d g| dQ | d gggg| d | d_ g| d$ | dj g| d0 | dv gg| d< | d g| dG | d g| dS | d ggg| d | da g| d& | dl g| d2 | dx gg| d> | d g| dI | d g| dU | d gggg| d | dc g| d( | dn g| d4 | dz gg| d@ | d g| dK | d g| dW | d ggg| d | de g| d* | dp g| d6 | d| gg| dB | d g| dM | d g| dY | d ggggg| d | d\ g| d! | dg g| d- | ds gg| d9 | d g| dD | d g| dP | d ggg| d | d^ g| d# | di g| d/ | du gg| d; | d g| dF | d g| dR | d gggg| d | d` g| d% | dk g| d1 | dw gg| d= | d g| dH | d g| dT | d ggg| d | db g| d' | dm g| d3 | dy gg| d? | d g| dJ | d g| dV | d gggg| d | dd g| d) | do g| d5 | d{ gg| dA | d g| dL | d g| dX | d ggg| d  | df g| d+ | dq g| d7 | d} gg| dC | d g| dN | d g| dZ | d ggggggksJ ddrd8d8}||| d | d[ g| d8 | d~ gg| d | d g| d | d gg| d, | dr g| dO | d gg| d | d_ g| d< | d gg| d$ | dj g| dG | d gg| d0 | dv g| dS | d gg| d | dc g| d@ | d gg| d( | dn g| dK | d gg| d4 | dz g| dW | d ggg	| d | d] g| d: | d gg| d" | dh g| dE | d gg| d. | dt g| dQ | d gg| d | da g| d> | d gg| d& | dl g| dI | d gg| d2 | dx g| dU | d gg| d | de g| dB | d gg| d* | dp g| dM | d gg| d6 | d| g| dY | d ggg	| d | d\ g| d9 | d gg| d! | dg g| dD | d gg| d- | ds g| dP | d gg| d | d` g| d= | d gg| d% | dk g| dH | d gg| d1 | dw g| dT | d gg| d | dd g| dA | d gg| d) | do g| dL | d gg| d5 | d{ g| dX | d ggg	| d | d^ g| d; | d gg| d# | di g| dF | d gg| d/ | du g| dR | d gg| d | db g| d? | d gg| d' | dm g| dJ | d gg| d3 | dy g| dV | d gg| d  | df g| dC | d gg| d+ | dq g| dN | d gg| d7 | d} g| dZ | d ggg	gk
sJ t|d|| d | d | d, | d | d$ | d0 | d | d( | d4 g	| d | d" | d. | d | d& | d2 | d | d* | d6 g	| d | d! | d- | d | d% | d1 | d | d) | d5 g	| d | d# | d/ | d | d' | d3 | d  | d+ | d7 g	g| d8 | d | dO | d< | dG | dS | d@ | dK | dW g	| d: | dE | dQ | d> | dI | dU | dB | dM | dY g	| d9 | dD | dP | d= | dH | dT | dA | dL | dX g	| d; | dF | dR | d? | dJ | dV | dC | dN | dZ 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sJ qttfD ]<}	|	d[d8dd}
t|
d|
ksJ t|
d|	d[d8ddksJ |	d[d8dd}| |	d[d8ddksJ qd S )NrX      rL   )r"   r   c                      
   t  dS )N)r   r   r   m1r   r   <lambda>      
 z(test_array_permutedims.<locals>.<lambda>c                      r   )N)r   r   r   r   r   r   r   r      r   c                      r   )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>       z*test_array_permutedims.<locals>.<listcomp>c                 S   s   g | ]}t   qS r   )r   r   r   r   r   r      s    r&   rW   re   )r$   r%   r"   r   )r   re   rW   r&   rY   c                      r   )N)r"   r"   r   r   r   r   r   r      r   c                            S N)r	   r   r   r   r   r          c                      r   r   )r   r   r   r   r   r      r   r   H   $   rZ   rJ   T   0   ri   rr   `   <   rp   L   (   rc   r*   X   4   r\   rv   d   @   rt   r)   P   ,   rg   rn   \   8   rl   ra   h   D   r^   r$   J   &   r}      V   2   z      b   >      N   *   r   rH   Z   6   r~      f   B      
   R   .   v      ^   :      r   j   F   r   r"   I   %   rx      U   1   y      a   =      M   )   q   r{   Y   5   ry      e   A      	   Q   -   u      ]   9      r|   i   E   rz   r%   K   rK   r[   rk   W   3   rj   rs   c   ?   rq   O   +   rd   r`   [   7   r]   rw   g   C   ru   rf   S   /   rh   ro   _   ;   rm   rb   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	   ZtomatrixTr3   r   Hr   r   
ValueErrorrM   r   listr   shuffler   shapetupler   ZzerosreversedZrankreshaper   )r   r0   dimsr   Zelemsrapermr.   Zpo2r4   r1   r2   r   )r   r   r   test_array_permutedims   s  

 B$$$$$$$$$	$$
#P22222
+N2"2"2"2"2"2"   Z     "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 ]\}}}}}||||||f  |||||f ksJJ q/td}t | |d}ttdtdtdtdtdD ]\}}}}}||||||f  |||||f ksJ qit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 )Nra   r$   abcdeZebdac)index_order_newindex_order_oldZcabedc                         t  tdtddS )NZaacder   r  r  r   r   r   r1   r   r   r   <      z/test_permutedims_with_indices.<locals>.<lambda>c                      r  )Nr   Zabccer  r  r   r  r   r   r   =  r  c                      r  )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                         t  g dtddS )Nr$   r"   r   r%   r&   r   )r  r  r   r  r   r   r   @  r  c                      r	  )Nr
  r   )r  r  r   r  r   r   r   A  r  )	r   rM   r   r   r   	itertoolsproductr   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   sn   ddl m}  tt| fD ])}|tddd}tt|g dks#J tt|D ]
\}}||ks3J q)qd S )Nr   )Matrixrr   r&   r   )r   r"   r$   r%   r&   rW   r   re   r)   r   r   rf   rJ   r   r   rk   r*   r{   rH   r`   rn   r   r   ro   )	sympy.matrices.denser  r   r   rM   r   r   r   	enumerate)r  r0   r1   r:   rF   r   r   r   test_flattenD  s   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g d	ks3J t ddgtg d
ksBJ td\}}}t	|||g }t|ddgtdd| d| gdd| d| gdd| d| ggksvJ t|ddgtdd| d| g|d| d| gd| d| d| ggksJ t|g dtdd| d| gksJ td\}}}}}	}
t	|||gg d|||g||	|
gtg dt|| | d| | |	 d| | |
 gksJ tddgddgt	|d| d| g|| ||	 ||
 gksJ ttddgddgt	|| ||	 ||
 g|d| d| gks3J 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  s    z%test_tensordiagonal.<locals>.<lambda>c                      s   t  ddgS )Nr   r  r   r  r   r   r   R  s    r"   )r"   r"   r"   )r   r&   r)   zx y zr$   r&   r)   r   re   rW   r   za b c X Y Zr#   )r   r"   r$   r%   c                   S   s   t g dg dgddgS )Nr#   )r&   rW   r   r   r"   r  r   r   r   r   r   h  s    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.   Zexpr2r   r   r    XYZr   )r  r  r   test_tensordiagonalN  s$   "JN($@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,     ') ,
