
    Qid                         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 Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)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                      ddl m}  ~ d S )Nr   	NDimArray)sympy.tensor.arrayr   r   s    }/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/tensor/array/tests/test_arrayop.pytest_import_NDimArrayr      s    ,,,,,,		    c                  ~   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          | |z  gg          k    sJ t          | g|g|g          t          | |z  |z  ggg          k    sJ t          | g|g|g|g          t          | |z  |z  |z  gggg          k    sJ t          |           | k    sJ t          | |          | |z  k    sJ t          | ||          | |z  |z  k    sJ t          | |||          | |z  |z  |z  k    sJ t          t          fD ]} || |g          }	 |g d          }
 |||||g          }t          |	|
|           ||| z  || z  || z  || z  gd|z  | z  d|z  | z  d|z  | z  d|z  | z  gd|z  | z  d|z  | z  d|z  | z  d|z  | z  gg||z  ||z  ||z  ||z  gd|z  |z  d|z  |z  d|z  |z  d|z  |z  gd|z  |z  d|z  |z  d|z  |z  d|z  |z  ggg          k    sJ t          | |gg d          t          |	|
          k    sJ t          |	d           |d| z  d|z  g          k    sJ t          |	dg           |d| z  gd|z  gg          k    sJ t          dg|	           |d| z  d|z  gg          k    sJ t          ||	           ||| z  ||z  g          k    sJ t          ||	|
           ||| z  d|z  | z  d|z  | z  g||z  d|z  |z  d|z  |z  gg          k    sJ t          |	|
|           ||| z  d|z  | z  d|z  | z  g||z  d|z  |z  d|z  |z  gg          k    sJ t          |
||	           ||| z  ||z  gd|z  | z  d|z  |z  gd|z  | z  d|z  |z  gg          k    sJ t          t          fD ]I} |ddd	d
          } |ddd	d
          }t          ||          t          dddddd          k    sJ Jd 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SparseArrayTypes                r   test_tensorproductr8      s   i  GAa!!!!!!!!!!!!!??a!s++++!qc""eacUGnn4444!qcA3''5AaCE7)+=+=====!qcA3,,!A#a%'}o0F0FFFFFq    A!A#%%%%Aq!!QqSU****Aq!$$!Aa////-/GH a a	Iq!fIiii  Iq!Ql##Q1%%ac1Q3!QqS5IAaCPQESTUVSVWXSXZ[\]Z]^_Z_abcdadefafKgjklmjmnojoqrstqtuvqvxyz{x{|}x}  @A  BC  @C  DE  @E  jF  5G67c1Q3!QqS5IAaCPQESTUVSVWXSXZ[\]Z]^_Z_abcdadefafKgjklmjmnojoqrstqtuvqvxyz{x{|}x}  @A  BC  @C  DE  @E  jF  5G4H *I *I I I I I aVYYY//=A3F3FFFFFQ""ii1ac
&;&;;;;;Q$$		AaC51Q3%.(A(AAAAAaS!$$		AaC1:,(?(?????Q""ii1ac
&;&;;;;;Q1%%QqS!A#a%1Q4G!A#qQRsSTuVWXYVYZ[V[I\3])^)^^^^^Q1%%QqS!A#a%1Q4G!A#qQRsSTuVWXYVYZ[V[I\3])^)^^^^^Q1%%QqS!A#J1Q!AQRSTQTUVQVXYZ[X[\]X]P^3_)`)`````` 56LM L LOqAJJ|44OqAJJ|44Q""&>UVabmo?p?p  sK  'L  'L  L  L  L  L  LL Lr   c                     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} t3          t5          d          d          }t7          |d          t3          ddg          k    sJ t3          | |||||||||	|
|||||||||||||gd          }t7          |d	          t3          | |z   ||z   g||z   ||z   g||z   |	|z   gg          k    sJ t7          |d
          t3          | |z   ||z   ||z   g          k    sJ t7          |d          t3          | |z   ||z   ||z   g||z   ||z   ||z   gg          k    sJ d S )Nr   )r!   r"   r#   r$   efghijklmnopqrsr2   uvwr/      )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>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r2   rI   rJ   rK   r/   r   ranger   )r!   r"   r#   r$   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r2   rI   rJ   rK   r/   r5   C1s                             r   test_tensorcontractionrS   ?   s    IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIeBii##AQ''5"b??::::	1aAq!Q1aAq!Q1aAqRSUVWYe	f	fBR((EAE1q5>AE1q5>TUXYTY[\_`[`Sa2b,c,cccccR++ua!eQUAE5J/K/KKKKKR((EAE1q5!a%3H1q5RSVWRWYZ]^Y^J_2`,a,aaaaaaar   c            	         ddl m} m}m}m}m}m} ||dz  z  t          |          z  t          |          z  }t          |          }t          |          }t          |g          }	t          ||          ||dz  z  t          |          z  t          ||dz  z  t          |          z  t          |          z            z  |z  k    sJ t          ||||g          t          ||z  |z  d|z  |z  |dz  z  |z  ||z  g          k    sJ t          |	|||g          t          ||z  |z  gd|z  |z  |dz  z  |z  g||z  gg          k    sJ t          |||g||gg          t          ||z  |z  d|z  |z  |dz  z  |z  g||z  |t          |          z  |z  |z  gg          k    sJ t          |	||g||gg          t          ||z  |z  gd|z  |z  |dz  z  |z  gg||z  g|t          |          z  |z  |z  ggg          k    sJ 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    sJ t          ||          ||dz  z  t          |          z  t          ||dz  z  t          |          z  t          |          z            z  |z  k    sJ t          |t          |||g                    t          ||z  |z  d|z  |z  |dz  z  |z  ||z  g          k    sJ t          |	t          |||g                    t          ||z  |z  gd|z  |z  |dz  z  |z  g||z  gg          k    sJ t          |t          ||g||gg                    t          ||z  |z  d|z  |z  |dz  z  |z  g||z  |t          |          z  |z  |z  gg          k    sJ t          |	t          ||g||gg                    t          ||z  |z  gd|z  |z  |dz  z  |z  gg||z  g|t          |          z  |z  |z  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    sJ 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J t          t          fD ]d}
t          | |dd          }t          ||           t          ddid          k    sJ t          || |f          t          dddd          k    sJ et          |||g          }d}t          ||          t!          g d	          k    sJ d S )
Nr   )r>   r?   r2   r/   r0   r1   r'   r%   r   r%   '   N  )r   i)r'   rW   rX   )r   r   r   )r.   r>   r?   r2   r/   r0   r1   r   r   r   r   r   r   r   r   r   r   )r>   r?   r2   r/   r0   r1   bexprsexprcexprr!   r7   r"   UEs                 r   test_derivative_by_arrayr^   J   s   ****************adF3q66M#a&& EJJEJJEugA5!$$!Q$s1vvc!AqD&Q-A:N6O6O(OPQ(QQQQQ51a),,uQwu}ac%iPQSTPTnUZFZ\abg\g6h0i0iiiii1q!Qi((EE!GEM?QqSYqRSt^TYEYDZ]bch]h\i2j,k,kkkkk5Aq6Aq6"233uuQwu}aPQcRWiXY[\X\n]bNb>cfklqfqsxy|}~yys  AB  tB  CH  tH  fI  >J  8K  8K  K  K  K  K11v1v.//5E!GEM?QqSQVYWXZ[W[^\aMaLb:cglmrgrfsv{|  AB  }C  }C  wC  DE  wE  FK  wK  vL  fM  :N  4O  4O  O  O  O  OQFQF+aV44AA?OSTVWRX[\^_Z`Qa>b8c8cccccQFQF+q!fq!f-=>>%Aq6TUWXSYJZ^_ab]cfgijek\lImLMq6TUWXSYJZ^_ab]cfgijek\lImIo Cp Cp p p p p q>>Qq!tVCFF]3qAvc!ff}SVV/C+D+DDQFFFFFuaAY''((E575=!A#e)AqD.QVBVX]^cXc2d,e,eeeee5!Q##$$a1U1a4PUAU@VY^_dYdXe.f(g(ggggguq!fq!f-..//5575=!A#e)TUWXTX.Y^J^:_bghmbmotuxyzu{u{o{|}o}  D  pD  bE  :F  4G  4G  G  G  G  G51a&1a&)**++ua1USTVWSWX]I]H^6_chincnborwx{|}x~x~r~  @A  sA  BG  sG  rH  bI  6J  0K  0K  K  K  K  K1v1v&''1v775Aq6Aq6BRVWYZU[^_ab]cTdAe;f;fffff1v1v&''AA/?)@)@AAUqRSfWXZ[V\M]abde`fijlmhn_oLpLMq6TUWXSYJZ^_ab]cfgijek\lImLo Fp Fp p p p p 56LM o o"a1::~>>q!$$(@!Q(X(XXXXXq1a&))-E!XYFZFZ\m-n-nnnnnn 	q!QiA	A1a  %<YYY%G%GGGGGGGr   c            
      @   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
         z   |d         z   |d         z   |d         z   |d         z   |d         z   |d         z   |d         z   |d         z   |d         z   |d         z   k    sJ t          |dd	          |d         |d         z   |d         z   |d         z   |d         z   |d         z   k    sJ t          |dd          t          |d         |d
         z   |d         z   |d         z   |d         |d         z   |d         z   |d         z   |d         |d         z   |d         z   |d         z   g|d         |d         z   |d          z   |d!         z   |d         |d         z   |d         z   |d         z   |d"         |d#         z   |d$         z   |d%         z   g|d&         |d'         z   |d(         z   |d)         z   |d*         |d+         z   |d,         z   |d-         z   |d         |d         z   |d         z   |d         z   gg          k    sJ t          |dd	          t          |d         |d
         z   |d         z   |d         z   |d         z   |d         z   |d         |d.         z   |d/         z   |d0         z   |d1         z   |d2         z   g|d3         |d4         z   |d5         z   |d6         z   |d7         z   |d8         z   |d         |d         z   |d         z   |d         z   |d         z   |d         z   gg          k    sJ d S )9Nr   r%   rM   )r)      a0:144r'   r'   r(   r(   r'   r'   rU   rP   l   o   |            r-      r(       #   )r   r%   r)   ra   p   s   r)         t   w   r,   rN   x   {                                          m   }         !   n   ~      rL   r'   "   )r   r   r   r   )uaFaposas       r   )test_issue_emerged_while_discussing_10972r   s   s   	1vB	AQ 	!	!B	r2r2	&	&BR00EAq6Aq6:J4K4KKKKK			B	r%%%	&	&BR88BqEBsGObQTg<UXZ[^X_<_bdehbi<ilnorls<svxy|v}<}  AC  DF  AG  =G  JL  MO  JP  =P  SU  VW  SX  =X  []  ^`  [a  =a  df  gi  dj  =j  j  j  j  jRv66"Q%"S'/BsG:SVXY\V]:]`bce`f:fiklnio:oooooR00EBqEBsGObQTg<UXZ[\X]<]_abe_fikloip_psuvwsx_x{}~  |A  `A=?Vbg=MPRSVPW=WZ\]^Z_=_<acefhcilnorlscsvxy|v}c}  AC  DF  AG  dG=?Wr#w=NQSTVQW=WZ\]_Z`=`bdehbilnorlsbsvxy{v|b|  @B  CE  @F  cFcG=?Wr#w=NQSTVQW=WZ\]_Z`=`bdehbilnorlsbsvxy{v|b|  @B  CE  @F  cF=?Wr#w=NQSTVQW=WZ\]_Z`=`=b;c 5d 5d d d d d
 R00EBqEBsGObQTg<UXZ[^X_<_bdegbh<hkmnpkq<qsuvwsx{}  B  |C  tC  FH  IL  FM  tM  PR  SV  PW  tW  Z\  ]_  Z`  t`  ce  fh  ci  ti  <j<>sGbg<MPRSVPW<WZ\]_Z`<`cefgch<hkmnpkq<qsuvysz}  AD  ~E  tE  HJ  KN  HO  tO  RT  UW  RX  tX  []  ^_  [`  t`  ce  fh  ci  ti  <j;k 5l 5l l l l l l lr   c                  H6   t          d          } t          t          fD ]q} || d d         d          t          d          t	                    k    sJ                                 j        t          d                                          k    sJ                                 j        t	                                                    k    sJ                                 j        t                                                    k    sJ                                 j	        t                                                    k    sJ                                 j                                                                        k    sJ                                 j                                                                        k    sJ                                 j	        
                                                                k    sJ t          t          fd           t          t          fd           t          t          fd           d}d t          |          D             }d	 t          t          |           D             } |||          }t          t          |                    }t!          j        |           t          t          ||          t%          |                    |k    sJ t          ||          j        t)           t+          |          |                    k    sJ |                    d
ddd          }t          |d          j        dk    sJ t          |g d          j        dk    sJ t          |t+          g d                    j        dk    sJ  || g d          t          t          fd           t          t          fd           t          t          f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| d.         | d/         g| d0         | d1         gg| d2         | d3         g| d4         | d5         gggg| d6         | d7         g| d8         | d9         gg| d:         | d;         g| d<         | d=         gg| d>         | d?         g| d@         | dA         ggg| d         | dB         g| dC         | dD         gg| dE         | dF         g| dG         | dH         gg| dI         | dJ         g| dK         | dL         ggg| dM         | dN         g| dO         | dP         gg| dQ         | dR         g| dS         | dT         gg| dU         | dV         g| dW         | dX         ggggg| dY         | dZ         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| 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    sJ t          d           || d         | dY         g| d6         | d|         gg| d
         | d         g| d         | d         gg| d*         | dp         g| dM         | 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g| d         | da         g| d>         | d         gg| d&         | dl         g| dI         | d         gg| d2         | dx         g| dU         | d         gggg| d         | dZ         g| d7         | d}         gg| d         | de         g| dB         | d         gg| d+         | dq         g| dN         | 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g| d         | db         g| d?         | d         gg| d'         | dm         g| dJ         | d         gg| d3         | dy         g| dV         | d         ggggg| d         | d[         g| d8         | d~         gg| d          | df         g| dC         | 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g          k    sJ t          d           || d         | dY         g| d
         | d         g| d*         | dp         gg| d6         | d|         g| d         | d         g| dM         | d         ggg| d         | d[         g| d          | df         g| d,         | dr         gg| d8         | d~         g| dC         | d         g| dO         | d         gggg| d         | d]         g| d"         | dh         g| d.         | dt         gg| d:         | d         g| dE         | d         g| dQ         | d         ggg| d         | d_         g| d$         | dj         g| d0         | dv         gg| d<         | d         g| dG         | d         g| dS         | d         gggg| d         | da         g| d&         | dl         g| d2         | dx         gg| d>         | d         g| dI         | d         g| dU         | d         ggg| d         | dc         g| d(         | dn         g| d4         | dz         gg| d@         | d         g| dK         | d         g| dW         | d         ggggg| d         | dZ         g| d         | de         g| d+         | dq         gg| d7         | d}         g| dB         | d         g| dN         | d         ggg| d         | d\         g| d!         | dg         g| d-         | ds         gg| d9         | d         g| dD         | d         g| dP         | d         gggg| d         | d^         g| d#         | di         g| d/         | du         gg| d;         | d         g| dF         | d         g| dR         | d         ggg| d         | d`         g| d%         | dk         g| d1         | dw         gg| d=         | d         g| dH         | d         g| dT         | d         gggg| d         | db         g| d'         | dm         g| d3         | dy         gg| d?         | d         g| dJ         | d         g| dV         | d         ggg| d         | dd         g| d)         | do         g| d5         | d{         gg| dA         | d         g| dL         | d         g| dX         | d         gggggg          k    sJ                     d
dpd6d6          }| || d         | dY         g| d6         | d|         gg| d
         | d         g| d         | d         gg| d*         | dp         g| dM         | d         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g	| d         | d[         g| d8         | d~         gg| d          | df         g| dC         | 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         | dZ         g| d7         | d}         gg| d         | de         g| dB         | d         gg| d+         | dq         g| dN         | d         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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	g          k    sJ t          |d           || d         | d
         | d*         | d         | d"         | d.         | d         | d&         | d2         g	| d         | d          | d,         | d         | d$         | d0         | d         | d(         | d4         g	| d         | d         | d+         | d         | d#         | d/         | d         | d'         | d3         g	| d         | d!         | d-         | d         | d%         | d1         | d         | d)         | d5         g	g| d6         | d         | dM         | d:         | dE         | dQ         | d>         | dI         | dU         g	| d8         | dC         | dO         | d<         | dG         | dS         | d@         | dK         | dW         g	| d7         | dB         | dN         | d;         | dF         | dR         | d?         | dJ         | dV         g	| d9         | dD         | dP         | d=         | dH         | dT         | dA         | dL         | dX         g	gg| dY         | d         | dp         | d]         | dh         | dt         | da         | dl         | dx         g	| d[         | df         | dr         | d_         | dj         | dv         | dc         | dn         | dz         g	| dZ         | de         | dq         | d^         | di         | du         | db         | dm         | dy         g	| d\         | dg         | ds         | d`         | dk         | dw         | dd         | do         | 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    sJ st          t4          fD ]}	 |	dYd6dd          }
t          |
d          |
k    sJ t          |
d           |	dYd6dd          k    sJ  |	dYd6dd          }|                                 |	dYd6dd          k    sJ d S )Nrb      rP   )r%   r   c                  $    t           d          S )N)r   r   m1s   r   <lambda>z(test_array_permutedims.<locals>.<lambda>   s    ;r4#8#8 r   c                  $    t           d          S )N)r   r   r   r   s   r   r   z(test_array_permutedims.<locals>.<lambda>       ;r6#:#: r   c                  $    t           d          S )N)r%   r'   r   r   r   s   r   r   z(test_array_permutedims.<locals>.<lambda>   s    ;r9#=#= r   c                 8    g | ]}t          j        d d          S )r%   ra   )randomrandint.0r>   s     r   
<listcomp>z*test_array_permutedims.<locals>.<listcomp>   s$    :::!$$:::r   c                 4    g | ]}t          j                     S  )r   r   s     r   r   z*test_array_permutedims.<locals>.<listcomp>   s    GGGQGGGr   r)   ra   ro   )r'   r(   r%   r   )r   ro   ra   r)   rc   c                  $    t           d          S )N)r%   r%   r   r   s   r   r   z(test_array_permutedims.<locals>.<lambda>   r   r   c                  ,                                      S N)r
   r   s   r   r   z(test_array_permutedims.<locals>.<lambda>   s    2<<>> r   c                  ,                                      S r   )r   r   s   r   r   z(test_array_permutedims.<locals>.<lambda>   s    2::<< r   r   H   $   rd   rN   T   0   rs   r|   `   <   rz   L   (   rm   r-   X   4   rf   r   d   @   r~   r,   P   ,   rq   rx   \   8   rv   rk   h   D   rh   r'   J   &   r      V   2   z      b   >      N   *   r   rL   Z   6   r      f   B      
   R   .   v      ^   :      r   j   F   r   r%   I   %   r      U   1   y      a   =      M   )   q   r   Y   5   r      e   A      	   Q   -   u      ]   9      r   i   E   r   r(   K   rO   re   ru   W   3   rt   r}   c   ?   r{   O   +   rn   rj   [   7   rg   r   g   C   r   rp   S   /   rr   ry   _   ;   rw   rl   k   G   ri   )r%   r   r'   r(   r)   ra   )r   r'   r%   r)   r(   ra   )r(   r'   r   r%   )r%   rW   )rW   rX   rW   r   r%   r'   )r%   r   r'   )r%   i )rX   rW   rW   )r%   rX   rV   )rW   r%   )rX   rW   )r   r   r   r   r
   tomatrixTr6   r	   Hr   r   
ValueErrorrQ   r   listr   shuffler   shapetupler   zerosreversedrankreshaper   )r   r3   dimsr  elemsrapermr1   po2r7   r4   r5   r   r   s               @@r   test_array_permutedimsr     s2   			B-/GH ]K ]K	Yr"1"vv&&2v&&)B--7777{{}}+b&"9"9"B"B"D"DDDDD{{}})B--"8"8":":::::{{}})B--"8"8":":::::{{}}'"++"6"6"8"88888{{}}",,.."9"9";";;;;;{{}}",,.."9"9";";;;;;{{}}"**,,"7"7"9"99999z8888999z::::;;;z====>>> ::eDkk:::GG%u0E*F*FGGGYue$$E$KK  t;r400*T2B2BCCrIIII2t$$*e4EK4E4Ee4L4L.M.MMMMMOOAa!$$1l++1\AAAA1lll++1\AAAA1k,,,7788>,NNNNYr---..z::::;;;z1111222z////0002xbggii(8(899::iiQ%B2b62c7"34227G"R&RTUXRYIZ6[_abd_e_abd_e_giklnioqstwqxhy^{ |Q%B2b62c7"3428:28@BDR&"S'AR7TR&"S'"RVRW$568 Q%R&rFBsG,.13BB0@2b62c7BS/TXZ[]X^XZ[^X_XacefhcikmnqkrbsWuvw Q%B2b62c7"3428:28@BDR&"S'AR7TWYZ\W]_abd_eVfiklnioqstwqxhyUz|Q%R&rFBsG,.13BB0@2b62c7BS/TXZ[]X^XZ[^X_XacefhcikmnqkrbsWuv R&"R&!BrFBsG#45B9;B9ACEb62c7BS8UR&"S'"RVRW$5689:  Q%R&rFBsG,.13BB0@2b62c7BS/TXZ[]X^XZ[]X^X`bdegbhjlmpjqarWtu Q%B2b62c7"3428:28@BDR&"S'AR7TR&"S'"RVRW$568 Q%R&rFBsG,.13BB0@2b62c7BS/TXZ[]X^XZ[^X_XacefhcikmnqkrbsWuvw Q%B2b62c7"3428:28@BDR&"S'AR7TWYZ\W]_abd_eVfiklnioqstwqxhyUz|Q%R&rFBsG,.13BB0@2b62c7BS/TXZ[]X^XZ[^X_XacefhcikmnqkrbsWuv R&"R&!BrFBsG#45B9;B9ACEb62c7BS8UR&"S'"RVRW$5689:! ;!?< !?< !< !< !< !<F 2122iiQ%A"Q%A0BqE2a5>BqE2a5>2RVXYZV[]_`a]bUcfhikflfhikflfn Uo pR&"R&!BrFBrF#34227G"R&JLR&JR 7SVXY[V\^`ac^dUehjkmhnprsupvgwTxzR&"R&!BrF$&rF$, -0222/?"R&"R&AQ.RVXY[V\^`ac^dUehjkmhnhjkmhnhp Uqr	s R&"R&!BrFBrF#34227G"R&JLR&JR 7SVXY[V\^`ac^dUehjkmhnprsupvgwTxzR&"R&!BrF$&rF$, -0222/?"R&"R&AQ.RVXY[V\^`ac^dUehjkmhnhjkmhnhp Uqr R&"R&!BrFBrF#343C7IBsGLNsGLU 7VS'2c7#bgr#w%78:;< CER&"R&AQTVWYTZTVWYTZT\ A]BDR&"R&AQTVWYTZ\^_a\bSc@dBDR&"R&AQTVWYTZTVWYTZT\ A]@^
 CER&"R&AQTVWYTZ\^_a\bSc@dBDR&"R&AQTVWYTZTVWYTZT\ A]BDR&"R&AQTVWYTZ\^_a\bSc@d@f CER&"R&AQTVWYTZTVWYTZT\ A]BDR&"R&AQTVWYTZ\^_a\bSc@dBDR&"R&AQTVWYTZTVWYTZT\ A]@^?_ FHWbQTgDVY[\_Y`bdehbiXjCkEGWbQTgDVY[\_Y`Y[\_Y`Yb DcEGWbQTgDVY[\_Y`bdehbiXjCkCm FHWbQTgDVY[\_Y`Y[\_Y`Yb DcEGWbQTgDVY[\_Y`bdehbiXjCkEGWbQTgDVY[\_Y`Y[\_Y`Yb DcCd
 FHWbQTgDVY[\_Y`bdehbiXjCkEGWbQTgDVY[\_Y`Y[\_Y`Yb DcEGWbQTgDVY[\_Y`bdehbiXjCkCman>o(p)7q )7q )q )q )q )qV 2122iiQ%A"Q%A"Q%A@BqE2a5>TVWXTY[]^_[`Sadfgidjdfgidjdl Cm nR&"R&!BrFBrF#3bfbf5EF"R&JLR&JRTVWYTZ\^_a\bScfhikflnpqsnteuIw xy R&"R&!BrF$&rF$,.0fbf-=?BDR&"R&AQTVWYTZ\^_a\bScfhikflfhikflfn Aop R&"R&!BrFBrF#3bfbf5EF"R&JLR&JRTVWYTZ\^_a\bScfhikflnpqsnteuIw xy
 R&"R&!BrF$&rF$,.0fbf-=?BDR&"R&AQTVWYTZ\^_a\bScfhikflfhikflfn Aop R&"R&!BrFBrF#3bfbf5EF"R&JLR&JRTVWYTZ\^_a\bScfhikflnpqsnteuIw xyz R&"R&!BrF$&rF$,.0fbf-=?BDR&"R&AQTVWYTZ\^_a\bScfhikflfhikflfn Aop S'2c7#bgr#w%7"S'2c79KLPRSVPWPRSVPWPY[]^a[bdfgjdkZlPRSVPWY[\_Y`OaOc de R&"R&!BrF$&rF$,.0fbf-=?BDR&"R&AQTVWYTZ\^_a\bScfhikflfhikflfn Aop S'2c7#bgr#w%7"S'2c79KLPRSVPWPRSVPWPY[]^a[bdfgjdkZlPRSVPWY[\_Y`OaOc de R&"R&!BsG$&sG$-/1#w3.@BEGVRPRVDTWYZ]W^`bcf`gVhkmnqkrkmnqkrkt Duv S'2c7#bgr#w%7"S'2c79KLPRSVPWPRSVPWPY[]^a[bdfgjdkZlPRSVPWY[\_Y`OaOc defg 7h  7h  h  h  h  hD jjAq!$$iiBqE2a5>BqE2a5>"BbeRPQU^VXYZV[]_`a]bUcDdhjklhmoqrsotguxz{}x~  AC  DF  AG  xH  gI  MO  PR  MS  UW  XZ  U[  L\  _a  bd  _e  gi  jl  gm  ^n  Ko  su  vx  sy  {}  ~@  {A  rB  EG  HJ  EK  MO  PR  MS  DT  qU  Y[  \^  Y_  ac  df  ag  Xh  km  np  kq  su  vx  sy  jz  W{  A  BD  E  GI  JL  GM  ~N  QS  TV  QW  Y[  \^  Y_  P`  }a  eg  hj  ek  mo  pr  ms  dt  wy  z|  w}  A  BD  E  vF  cG  KM  NP  KQ  SU  VX  SY  JZ  ]_  `b  ]c  eg  hj  ek  \l  Im  "n  su  vx  sy  {}  ~@  {A  rB  EG  HJ  EK  MO  PR  MS  DT  qU  Y[  \^  Y_  ac  df  ag  Xh  km  np  kq  su  vx  sy  jz  W{  A  BD  E  GI  JL  GM  ~N  QS  TV  QW  Y[  \^  Y_  P`  }a  eg  hj  ek  mo  pr  ms  dt  wy  z|  w}  A  BD  E  vF  cG  KM  NP  KQ  SU  VX  SY  JZ  ]_  `b  ]c  eg  hj  ek  \l  Im  qs  tv  qw  y{  |~  y  p@	  C	E	  F	H	  C	I	  K	M	  N	P	  K	Q	  B	R	  oS	  W	Y	  Z	\	  W	]	  _	a	  b	d	  _	e	  V	f	  i	k	  l	n	  i	o	  q	s	  t	v	  q	w	  h	x	  U	y	  }		  @
B
  }	C
  E
G
  H
J
  E
K
  |	L
  O
Q
  R
T
  O
U
  W
Y
  Z
\
  W
]
  N
^
  {	_
  c
e
  f
h
  c
i
  k
m
  n
p
  k
q
  b
r
  u
w
  x
z
  u
{
  }

  @B  }
C  t
D  a
E  pF  KM  NP  KQ  SU  VX  SY  JZ  ]_  `b  ]c  eg  hj  ek  \l  Im  qs  tv  qw  y{  |~  y  p@  CE  FH  CI  KM  NP  KQ  BR  oS  WY  Z\  W]  _a  bd  _e  Vf  ik  ln  io  qs  tv  qw  hx  Uy  }  @B  }C  EG  HJ  EK  |L  OQ  RT  OU  WY  Z\  W]  N^  {_  ce  fh  ci  km  np  kq  br  uw  xz  u{  }  @B  }C  tD  aE  IK  LN  IO  QS  TV  QW  HX  []  ^`  [a  ce  fh  ci  Zj  Gk  oq  rt  ou  wy  z|  w}  n~  AC  DF  AG  IK  LN  IO  @P  mQ  UW  X[  U\  ^`  ad  ^e  Tf  ik  lo  ip  rt  ux  ry  hz  S{  A  BE  F  HJ  KN  HO  ~P  SU  VY  SZ  \^  _b  \c  Rd  }e  Hf  km  nq  kr  tv  wz  t{  j|  A  BE  F  HJ  KN  HO  ~P  iQ  UW  X[  U\  ^`  ad  ^e  Tf  ik  lo  ip  rt  ux  ry  hz  S{  A  BE  F  HJ  KN  HO  ~P  SU  VY  SZ  \^  _b  \c  Rd  }e  ik  lo  ip  rt  ux  ry  hz  }  @C  }D  FH  IL  FM  |N  gO  SU  VY  SZ  \^  _b  \c  Rd  gi  jm  gn  pr  sv  pw  fx  Qy  }  @C  }D  FH  IL  FM  |N  QS  TW  QX  Z\  ]`  Za  Pb  {c  gi  jm  gn  pr  sv  pw  fx  {}  ~A  {B  DF  GJ  DK  zL  eM  QS  TW  QX  Z\  ]`  Za  Pb  eg  hk  el  np  qt  nu  dv  Ow  {}  ~A  {B  DF  GJ  DK  zL  OQ  RU  OV  XZ  [^  X_  N`  ya  hb  !c  d  d  d  d  d  d3--r!ubeRPQUTVWYTZ\^_a\bdfgidjlnoqlrtvwytz|~  @B  }C  ?D  GI  JL  GM  OQ  RT  OU  WY  Z\  W]  _a  bd  _e  gi  jl  gm  oq  rt  ou  wy  z|  w}  A  BD  E  GI  JL  GM  FN  QS  TV  QW  Y[  \^  Y_  ac  df  ag  ik  ln  io  qs  tv  qw  y{  |~  y  AC  DF  AG  IK  LO  IP  RT  UX  RY  PZ  ]_  `c  ]d  fh  il  fm  oq  ru  ov  xz  {~  x  AC  DG  AH  JL  MP  JQ  SU  VY  SZ  \^  _b  \c  eg  hk  el  \m  >n  rt  uv  rw  y{  |}  y~  @B  CE  @F  HJ  KM  HN  PR  SU  PV  XZ  []  X^  `b  ce  `f  hj  km  hn  pr  su  pv  qw  z|  }  z@  BD  EG  BH  JL  MO  JP  RT  UW  RX  Z\  ]_  Z`  bd  eg  bh  jl  mo  jp  rt  uw  rx  z|  }  z@  yA  DF  GI  DJ  LN  OQ  LR  TV  WY  TZ  \^  _a  \b  df  gi  dj  ln  oq  lr  tv  wy  tz  |~  B	  |C	  E	G	  H	K	  E	L	  CM	  P	R	  S	V	  P	W	  Y	[	  \	_	  Y	`	  b	d	  e	h	  b	i	  k	m	  n	q	  k	r	  t	v	  w	z	  t	{	  }		  @
C
  }	D
  F
H
  I
L
  F
M
  O
Q
  R
U
  O
V
  X
Z
  [
^
  X
_
  O	`
  pa
  =b
  g
i
  j
k
  g
l
  n
p
  q
r
  n
s
  u
w
  x
y
  u
z
  |
~
  
A  |
B  DF  GI  DJ  LN  OQ  LR  TV  WY  TZ  \^  _a  \b  df  gi  dj  f
k  np  qs  nt  vx  y{  v|  ~@  AC  ~D  FH  IK  FL  NP  QS  NT  VX  Y[  V\  ^`  ac  ^d  fh  ik  fl  np  qs  nt  mu  xz  {}  x~  @B  CE  @F  HJ  KM  HN  PR  SU  PV  XZ  []  X^  `b  ce  `f  hj  km  hn  pr  sv  pw  y{  |  y@  wA  DF  GJ  DK  MO  PS  MT  VX  Y\  V]  _a  be  _f  hj  kn  ho  qs  tw  qx  z|  }@  zA  CE  FI  CJ  LN  OR  LS  CT  e
U  Y[  \]  Y^  `b  cd  `e  gi  jl  gm  oq  rt  ou  wy  z|  w}  A  BD  E  GI  JL  GM  OQ  RT  OU  WY  Z\  W]  X^  ac  df  ag  ik  ln  io  qs  tv  qw  y{  |~  y  AC  DF  AG  IK  LN  IO  QS  TV  QW  Y[  \^  Y_  ac  df  ag  `h  km  np  kq  su  vx  sy  {}  ~@  {A  CE  FH  CI  KM  NP  KQ  SU  VX  SY  []  ^`  [a  ce  fi  cj  ln  or  ls  jt  wy  z}  w~  @B  CF  @G  IK  LO  IP  RT  UX  RY  []  ^a  [b  df  gj  dk  mo  ps  mt  vx  y|  v}  A  BE  F  vG  WH  d
I  <J  2K  2K  K  K  K  K  K 56LM R ROqNN,ABB1i((A----1i((OOa<P<PRg,h,hhhhhOqNNN;;{{}}a0@0@. Q QQQQQQR Rr   c            	      0   t          t          d                                        ddddd          t          d          } t          d          }t	          | |          }t          j        t          d          t          d          t          d          t          d          t          d                    D ]&\  }}}}}||||||f         |||||f         k    sJ 't          d          }t	          | |          }t          j        t          d          t          d          t          d          t          d          t          d                    D ]&\  }}}}}||||||f         |||||f         k    sJ 't          t          fd           t          t          fd           t          t          fd	           t          t          fd
           t          t          fd           t          t          fd           d S )Nrk   r'   abcdeebdac)index_order_newindex_order_oldcabedc                  \    t           t          d          t          d                    S )Naacder  r  r  r   r	  r4   s   r   r   z/test_permutedims_with_indices.<locals>.<lambda><  &    {1d7mm]abi]j]jkkk r   c                  \    t           t          d          t          d                    S )Nr  abccer  r   r!  s   r   r   z/test_permutedims_with_indices.<locals>.<lambda>=  r"  r   c                  \    t           t          d          t          d                    S )Nr  abcer  r   r!  s   r   r   z/test_permutedims_with_indices.<locals>.<lambda>>  s&    {1d7mm]abh]i]ijjj r   c                  \    t           t          d          t          d                    S )Nr&  r  r   r!  s   r   r   z/test_permutedims_with_indices.<locals>.<lambda>?  s&    {1d6ll\`ag\h\hiii r   c                  F    t           g dt          d                    S )Nr'   r%   r   r(   r)   r  )r  r   r!  s   r   r   z/test_permutedims_with_indices.<locals>.<lambda>@  !    {1oootT[}}]]] r   c                  F    t           g dt          d                    S )Nr)  r  )r  r   r!  s   r   r   z/test_permutedims_with_indices.<locals>.<lambda>A  r*  r   )	r   rQ   r  r	  r   	itertoolsproductr   r  )	indices_newindices_oldnew_Ar!   r"   r#   r$   r:   r4   s	           @r   test_permutedims_with_indicesr1  1  s   eBii  Aq!Q//Aw--Kw--K;TTTE"*588U1XXuQxxqSXYZS[S[\\ 8 81aAQ1a]#qAq!Q'777777w--K;TTTE"*588U1XXuQxxqSXYZS[S[\\ 8 81aAQ1a]#qAq!Q'777777
:kkkklll
:kkkklll
:jjjjkkk
:iiiijjj
:]]]]^^^
:]]]]^^^^^r   c                  *   ddl m}  t          t          | fD ]|} |t	          d                                        dd          }t          t          |                    g dk    sJ t          t          |                    D ]\  }}||k    sJ }d S )Nr   )Matrixr|   r)   r   )r   r%   r'   r(   r)   ra   r   ro   r,   r   r   rp   rN   r   r   ru   r-   r   rL   rj   rx   r   r   ry   )	sympy.matrices.denser3  r   r   rQ   r  r	  r   	enumerate)r3  r3   r4   r>   rJ   s        r   test_flattenr6  D  s    ++++++-/GP  	IeBii  ((A..GAJJ#y#y#yyyyygajj)) 	 	DAq66666		 r   c            	         ddl m}  t          t          d                                        dd          t          t          fd           t          t          fd           t           | d          ddg          t          g d          k    sJ t          ddg          t          g d	          k    sJ t          d
          \  }}}t          |||g          }t          |ddg          t          dd|z  d|z  gdd|z  d|z  gdd|z  d|z  gg          k    sJ t          |ddg          t          dd|z  d|z  g|d|z  d|z  gd|z  d|z  d|z  gg          k    sJ t          |g d          t          dd|z  d|z  g          k    sJ t          d          \  }}}}}	}
t          |||gg d|||g||	|
g          t          g d          t          ||z  |z  d|z  |z  |	z  d|z  |z  |
z  g          k    sJ t          ddgddg          t          |d|z  d|z  g||z  ||	z  ||
z  g          k    sJ t          t          ddg          ddg          t          ||z  ||	z  ||
z  g|d|z  d|z  g          k    sJ t          t          d            t          t          fd           d S )Nr   )eyer   r(   c                  *    t           dgdg          S )Nr   r%   r   exprs   r   r   z%test_tensordiagonal.<locals>.<lambda>Q  s    ~dQC!== r   c                  (    t           ddg          S )Nr   r:  r;  s   r   r   z%test_tensordiagonal.<locals>.<lambda>R  s    ~dQF;; r   r%   )r%   r%   r%   )r   r)   r,   zx y zr'   r)   r,   r   ro   ra   r  za b c X Y Zr&   )r   r%   r'   r(   c                  2    t          g dg dgddg          S )Nr&   )r)   ra   r   r   r%   r:  r   r   r   r   z%test_tensordiagonal.<locals>.<lambda>h  s!    ~yyy))).Dq!fMM r   c                  R    t                               ddd          ddg          S )Nr(   r   r%   r'   )r   r  )expr3s   r   r   z%test_tensordiagonal.<locals>.<lambda>i  s%    ~emmAq!.D.Dq!fMM r   )
r4  r8  r   rQ   r  r   r  r   r   r   )r8  r/   r0   r1   expr2r!   r"   r#   XYZr<  r@  s              @@r   test_tensordiagonalrE  N  sw   ((((((q??""1a((D
:====>>>
:;;;;<<<##a&&1a&))U999-=-=====$A''5+;+;;;;;gGAq!1a)T**E%!Q((EAqsAaC=1ac1Q3-RSUVWXUXZ[\]Z]Q^2_,`,`````%!Q((EAqsAaC=1ac1Q3-RSTURUWXYZWZ\]^_\_Q`2a,b,bbbbb%++ua1ac]/C/CCCCC }--Aq!Q11a)YYYAq	Aq!9EEE%..%1Q!Aa1Qq8Q2R2RRRRR%!Q!Q00M1ac1Q3-RSTURUWXYZWZ\]^_\_Q`4a4aaaaa .A77!Q@@MSTUVSVXYZ[X[]^_`]`RadeghijgjlmnolocpDqDqqqqq
:MMNNN
:MMMMNNNNNr   )+r,  r   sympy.combinatoricsr    sympy.combinatorics.permutationsr   sympy.testing.pytestr   sympy.core.functionr   sympy.core.symbolr   $sympy.functions.elementary.complexesr   r	   r
   &sympy.functions.elementary.exponentialr   r   (sympy.functions.elementary.trigonometricr   r   r   r   r   r   r   sympy.tensor.array.arrayopr   r   r   r   r   r   r   r8   rS   r^   r   r  r1  r6  rE  r   r   r   <module>rO     s        + + + + + + 7 7 7 7 7 7 ' ' ' ' ' ' $ $ $ $ $ $ % % % % % % P P P P P P P P P P = = = = = = = = ? ? ? ? ? ? ? ? o o o o o o o o o o o o                 
$L $L $LNb b b&H &H &HRl l l&hR hR hRV_ _ _&  O O O O Or   