+
    io                        ^ RI HtHtHtHtHtHtHtHtH	t	H
t
HtHtHtHtHt ^ RIHtHtHtHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIH t  ^ RI!H"t"H#t# ^ RI$H%t%H&t& ^ R	I H't' ^ R
IH(t( ^ RI)t)]! R4      w  t*t+t,R t-R t.R t/R t0R t1R t2R t3R t4R t5R t6R t7R t8R t9R t:R t;R t<R t=R t>R t?R  t@R! tAR" tBR# tCR$ tDR% tER& tFR' tGR( tHR) tIR* tJR+ tKR, tLR- tMR. tNR/ tOR0 tPR1 tQR# )2    )pisymbolsRationalIntegerGoldenRatio
EulerGammaCatalanLambdaDummyEqNeLeLtGtGe)	PiecewisesincosAbsexpceilingsqrt)raiseswarns_deprecated_sympy)GLSLPrinter)
StrPrinter)implemented_function)IndexedBaseIdx)MatrixMatrixSymbol)Tuple	glsl_codeNzx,y,zc                  D    \        \        \        4      4      R 8X  g   Q hR# )abs(x)N)r$   r   x     \/var/www/html/photoedit/myenv/lib/python3.14/site-packages/sympy/printing/tests/test_glsl.pytest_printmethodr+      s    SV(((r)   c                  r   \        \        \        ,          R R7      R8X  g   Q h\        \        \        ,          \        ,           R R7      R8X  g   Q h\        \        \        \        ,           ,          R R7      R8X  g   Q h\        \        \        \        ,           ,          R R7      R8X  g   Q h\        \        \        \        \        R,          ,          ,           ,          R R7      R8X  g   Q h\        \        ) \        ,
          R RR7      R	8X  g   Q h\        \        ) \        ,
          R R7      R
8X  g   Q hR# )F)use_operatorsz	mul(x, y)zadd(pow(x, y), z)zmul(x, add(y, z))      ?zmul(x, add(y, pow(z, sqrt(y))))zzero())r-   zerozsub(zero(), add(x, y))zsub(0.0, add(x, y))Nr$   r'   yzr(   r)   r*   test_print_without_operatorsr3      s    QqS/;>>>QT!VE26IIIIQ!WU37JJJJQ!WU37JJJJQ!QV)_U;?````aRTX>BZZZZaRT/3HHHHr)   c                      \        \        \        4      4      R 8X  g   Q h\        \        R,          4      R 8X  g   Q h\        \        \        4      4      R 8X  g   Q hR# )zsqrt(x)r.   N)r$   r   r'   r(   r)   r*   test_glsl_code_sqrtr5      sG    T!W***QV	)))T!W***r)   c                     \        R \        \        ^\        ,          4      4      p \        \        ^,          4      R8X  g   Q h\        \        \        ^,          ,          4      R8X  g   Q h\        ^V ! \        4      R,          \        \        \        ,          ,
          ,          ,          \        ^,          \        ,           ,          4      R8X  g   Q h\        \        R,          4      R8X  g   Q hR# )gzpow(x, 3.0)zpow(x, pow(y, 3.0))g      @z.pow(3.5*2*x, -x + pow(y, x))/(pow(x, 2.0) + y)z1.0/xNg      )r   r
   r'   r$   r1   )r7   s    r*   test_glsl_code_Powr8   #   s    S&AaC.1AQT?m+++QAY#8888Q!SA1H--q!tax8989 9 9QW(((r)   c                     \        \        \        \        4      4      R 8X  g   Q h\        \	        \        \        4      4      R8X  g   Q h\        \        \        \        4      4      R8X  g   Q h\        \        \        \        4      4      R8X  g   Q h\        \        \        \        4      4      R8X  g   Q h\        \        \        \        4      4      R8X  g   Q hR# )zx == yzx != yzx <= yzx < yzx > yzx >= yN)	r$   r   r'   r1   r   r   r   r   r   r(   r)   r*   test_glsl_code_Relationalr:   ,   s    R1X(***R1X(***R1X(***R1X')))R1X')))R1X(***r)   c                  h    \        \        ^4      4      R8X  g   Q h\        \        4      R8X  g   Q hR# )   zfloat E = 2.71828183;
Ezfloat pi = 3.14159265;
piN)r$   r   r   r(   r)   r*   test_glsl_code_constants_mathhr=   5   s-    SV ::::R=8888r)   c                      \        ^\        ,          4      R8X  g   Q h\        ^\        ,          4      R8X  g   Q h\        ^\        ,          4      R8X  g   Q hR# )   z-float GoldenRatio = 1.61803399;
2*GoldenRatioz&float Catalan = 0.915965594;
2*Catalanz,float EulerGamma = 0.577215665;
2*EulerGammaN)r$   r   r	   r   r(   r)   r*   test_glsl_code_constants_otherr@   <   sJ    Q{]#'WWWWQwY#LLLLQz\"&UUUUr)   c                      \        \        ^^4      4      R8X  g   Q h\        \        ^^	4      4      R8X  g   Q h\        \        ^R4      4      R8X  g   Q h\        \        RR4      4      R8X  g   Q hR# )   z3.0/7.02z-3.0/7.0Ni)r$   r   r(   r)   r*   test_glsl_code_RationalrE   B   sg    Xa^$	111Xb!_%,,,Xa_%333Xb"%&)333r)   c                  r    \        \        ^C4      4      R8X  g   Q h\        \        R4      4      R8X  g   Q hR# )C   67z-1N)r$   r   r(   r)   r*   test_glsl_code_IntegerrJ   I   s0    WR[!T)))WR[!T)))r)   c                  l    \        \        \        4      \        \        4      ,          4      R 8X  g   Q hR# )zpow(sin(x), cos(x))N)r$   r   r'   r   r(   r)   r*   test_glsl_code_functionsrL   N   s#    SVs1v%&*????r)   c            	         \        R 4      p \        R\        V ^V ,          4      4      p\        V! V 4      4      R8X  g   Q h\        R\        V ^V ,          \        ,          4      4      p\        V! V 4      4      R8X  g   Q h\        R4      p\        R\        RRR7      4      p\        R\        W ^V ,           ,          ^V ,           ,          4      4      p\        V! W#,          4      W#,          R	7      R
8X  g   Q hR# )r'   r7   z2*xz(float Catalan = 0.915965594;
2*x/CatalanAinTinteger	assign_toz@for (int i=0; i<n; i++){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
}N)r   r   r
   r$   r	   r   r   )r'   r7   rN   rO   s       r*   test_glsl_code_inline_functionrU   R   s    AS&AaC.1AQqT?e###S&AaCK"89AQqT?IIIICACd+,AS&q1uIq1u,=">?AQqtW-	  r)   c                      \        \        \        4      4      R 8X  g   Q h\        \        \        4      4      R8X  g   Q hR# )zceil(x)r&   N)r$   r   r'   r   r(   r)   r*   test_glsl_code_exceptionsrW   b   s0    WQZ I---SV(((r)   c                     \        \        \        ,          4      R 8X  g   Q h\        \        \        ,          4      R8X  g   Q h\        \        ( 4      R8X  g   Q h\        \        \        ,          \        ,          4      R8X  g   Q h\        \        \        ,          \        ,          4      R8X  g   Q h\        \        \        ,          \        ,          4      R8X  g   Q h\        \        \        ,          \        ,          4      R8X  g   Q hR# )zx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y)Nr0   r(   r)   r*   test_glsl_code_booleanrY   g   s    QUx'''QUx'''aR=D   QUQY=000QUQY=000a!eq[!]222a!eq[!_444r)   c                  V  a \        \        \        ^8  3\        ^,          R34      o\        S4      p RpW8X  g   Q h\        SRR7      R8X  g   Q h\        \        \        ^8  3\        ^,          \        ^8  3\        \        4      \        ^ 8  34      o\	        \
        V3R l4       R# )r<   Tz)((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
))crS   z5if (x < 1) {
   c = x;
}
else {
   c = pow(x, 2.0);
}c                     < \        S 4      # Nr#   )exprs   r*   <lambda>*test_glsl_code_Piecewise.<locals>.<lambda>   s	    yr)   N)r   r'   r$   r   r   
ValueError)psr^   s     @r*   test_glsl_code_Piecewiserd   q   s    aQZ!Q$.D$A  6M6TS)	 	 	 aQZ!Q$AQQ@D
:./r)   c                      \        ^\        \        \        ^8  3\        ^,          R34      ,          4      p RpW8X  g   Q hR# )r?   Tz+2*((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
))N)r$   r   r'   )rb   rc   s     r*   test_glsl_code_Piecewise_deeprf      s=    !Iq!a%j1a4,778A  6M6r)   c                  (    \        \        R  4       R# )c                  6    \        \        \        4      R R7      # )garbage)method)r$   r   r'   r(   r)   r*   r_   )test_glsl_code_settings.<locals>.<lambda>   s    iAyAr)   N)r   	TypeErrorr(   r)   r*   test_glsl_code_settingsrm      s    
9ABr)   c                  N   \        R RR7      w  rp\        RV 4      \        RV4      \        RV4      rTp\        4       p\        4       Vn        \        R4      V,          pVP                  V4      R8X  g   Q h\        R4      W43,          pVP                  V4      R	W,          V,           ,          8X  g   Q h\        R
4      W4V3,          p	VP                  V	4      RW2,          V,          WB,          ,           V,           ,          8X  g   Q hVP                  \        4       8X  g   Q hR# )zn m oTrQ   rO   jkr'   zx[j]rN   zA[%s]BzB[%s]N)r   r   r   set_not_cr   _print_Indexed)
rP   morO   ro   rp   rb   r'   rN   rq   s
             r*   test_glsl_code_Indexedrw      s    gt,GA!#qk3sA;C!AAuAHCAA&(((CAA'QSU"3333Cq!AA'QSU13Yq["999988sur)   c                  D   \        . RO4      R8X  g   Q h\        . RORR7      R8X  g   Q h\        . RO4      \        R4      8X  g   Q h\        . RO4      \        \        ^^^4      4      8X  g   Q h\        R^^4      p \        V ^ ,          V ^,          .4      '       g   Q hR# )	r<   zvec4(1, 2, 3, 4)F)
glsl_typeszfloat[3](1, 2, 3)rN   N)r<   r?   rB      r<   r?   rB   )r$   r"   r!   )ru   s    r*   test_glsl_code_list_tuple_Tupler|      s    Y#5555W.2EEEEW7!3333W51Q<!8888S1Aad1Q4[!!!!r)   c                      \        R RR7      w  r\        R4      p\        R4      p\        R4      p\        RV4      p\        RV 4      pRp\        W%V3,          W6,          ,          WE,          R	7      pW8X  g   Q hR
# )n mTrQ   rN   r'   r1   rO   ro   zfor (int i=0; i<m; i++){
   y[i] = 0.0;
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      y[i] = A[n*i + j]*x[j] + y[i];
   }
}rS   Nr   r   r   r$   )	rP   ru   rN   r'   r1   rO   ro   rc   r[   s	            r*   "test_glsl_code_loops_matrix_vectorr      ss    5$'DACACACACACA	  	!qD'!$,!$/A6M6r)   c                     \        R R\        R7      w  r\        R4      p\        R4      p\        W4      p RRV P                  P
                  RVP
                  /,          p\        W ,          W0,          R7      pWT8X  g   Q hR	# )
zi mT)rR   clsr'   r1   zlfor (int i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){
   y[i_%(icount)i] = x[i_%(icount)i];
}icountmcountrS   N)r   r   r   r   labeldummy_indexr$   )rO   ru   r'   r1   expectedcodes         r*   test_dummy_loopsr      sv    5$E2DACACAA	A	 
177&&!--@	AH
 QTQT*Dr)   c                  D   \        R RR7      w  r\        R4      p\        R4      p\        R4      p\        R4      p\        RV4      p\        RV 4      pR	p\        W&V3,          W7,          ,          W6,          ,           WV,          ,           WF,          R
7      p	W8X  g   Q hR# )r~   TrQ   rN   r'   r1   r2   rO   ro   zfor (int i=0; i<m; i++){
   y[i] = x[i] + z[i];
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      y[i] = A[n*i + j]*x[j] + y[i];
   }
}rS   Nr   )
rP   ru   rN   r'   r1   r2   rO   ro   rc   r[   s
             r*   test_glsl_code_loops_addr      s    5$'DACACACACACACA	  	!qD'!$,%,=A6M6r)   c                     \        R RR7      w  rr#\        R4      p\        R4      p\        R4      p\        RV4      p\        RV 4      p\        RV4      p	\        R	V4      p
R
Wp,          V,          V,          W,          V,          ,           W,          ,           V
,           : RW,          V,          W,          ,           V
,           : R2R,           p\        WXW3,          WGWV
3,          ,          Wg,          R7      pW8X  g   Q hR# )n m o pTrQ   abr1   rO   ro   rp   lzfor (int i=0; i<m; i++){
   y[i] = 0.0;
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      for (int k=0; k<o; k++){
         for (int l=0; l<p; l++){
            y[i] = a[z]*b[
] + y[i];
         }
      }
   }
}rS   Nr   )rP   ru   rv   rb   r   r   r1   rO   ro   rp   r   rc   r[   s                r*   *test_glsl_code_loops_multiple_contractionsr      s    D1JA!CACACACACACACA 78c!eAgAo6Ka6O6OQRQTUVQVYZY\Q\_`Q`Q`	b		  	!qG*Q!z]*ad;A6M6r)   c                     \        R RR7      w  rr#\        R4      p\        R4      p\        R4      p\        R4      p\        RV4      p\        RV 4      p	\        R	V4      p
\        R
V4      pRW,          V,          V,          W,          V,          ,           W,          ,           V,           : RW,          V,          V,          W,          V,          ,           W,          ,           V,           : RW,          V,          W,          ,           V,           : R2R,           p\        WHWV3,          WXWV3,          ,           WiW3,          ,          Wx,          R7      pWl8X  g   Q hR# )r   TrQ   r   r   r[   r1   rO   ro   rp   r   zfor (int i=0; i<m; i++){
   y[i] = 0.0;
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      for (int k=0; k<o; k++){
         for (int l=0; l<p; l++){
            y[i] = (a[z] + b[z])*c[r   r   rS   Nr   )rP   ru   rv   rb   r   r   r[   r1   rO   ro   rp   r   rc   s                r*   test_glsl_code_loops_addfactorr     sF   D1JA!CACACACACACACACA ABAa!#a%RSRU@UXY@Y@Y[\[^_`[`ab[befehijej[jmnmp[pst[t[tvwvyz{v{~  B  wB  EF  wF  wF	G		  	1aZ=1aZ=0!qG*<MA6M6r)   c                     \        R RR7      w  rr#\        R4      p\        R4      p\        R4      p\        R4      p\        RV4      p\        RV 4      p	\        R	V4      p
R
pRW,          V,          W,          ,           V
,           ,          R,           pRW,          V
,           ,          R,           pRW,          V	,           ,          R,           p\        WY,          WHV	3,          ,          WZ,          WHV
3,          ,          ,           WY,          WZ,          ,          WhW3,          ,          ,           Wx,          R7      pWkV,           V,           VRR ,           8X  g   WkV,           V,           VRR ,           8X  g   WkV,           V,           VRR ,           8X  gc   WkV,           V,           VRR ,           8X  gC   WkV,           V,           VRR ,           8X  g#   WkV,           V,           VRR ,           8X  g   Q hR# R# R# R# R# R# )r   TrQ   r   r   r[   r1   rO   ro   rp   z*for (int i=0; i<m; i++){
   y[i] = 0.0;
}
z|for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      for (int k=0; k<o; k++){
         y[i] = b[j]*b[k]*c[%s] + y[i];
z      }
   }
}
zUfor (int i=0; i<m; i++){
   for (int k=0; k<o; k++){
      y[i] = a[%s]*b[k] + y[i];
z   }
}
zUfor (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      y[i] = a[%s]*b[j] + y[i];
rS   NrI   r   )rP   ru   rv   rb   r   r   r[   r1   rO   ro   rp   s0s1s2s3s                  r*   #test_glsl_code_loops_multiple_termsr   *  s   D1JA!CACACACACACACA	 	4 89s1uqs{Q	H			 	,/0sQw	8		 	,/0sQw	8		  		Q!tWqtAdG|#ad14iQ'
&::ad	LAb23B''b23B''b23B''b23B''b23B''b23B'') (
 ( ( ( ( ( (r)   c            	      d   \        \        \        ,          \        ^\        ,           \        ^ 8  3\        R34      \	        \
        4      .4      p \        R^^4      p\        WR7      R8X  g   Q h\        \        V^ ,          V^,          .4      4      '       g   Q h\        ^VR
,          ,          \        ^ 8  3VR
,          R34      \	        VR,          4      ,           VR,          ,           p\        V4      R8X  g   Q h\        R^^4      p\        R^^4      p\        \	        VR,          4      ^ \        VR
,          4      .VR,          VR
,          ,           VR,          ^.^VR,          ,          VR,          ,          \        VR,          4      ^,           ^ ..4      p\        WT4      R8X  g   Q hR	# )r?   TrN   rS   z\A[0][0] = x*y;
if (y > 0) {
   A[1][0] = x + 2;
}
else {
   A[1][0] = y;
}
A[2][0] = sin(z);zF((x > 0) ? (
   2*A[2][0]
)
: (
   A[2][0]
)) + sin(A[1][0]) + A[0][0]qMzM[0][0] = sin(q[1]);
M[0][1] = 0;
M[0][2] = cos(q[2]);
M[1][0] = q[1] + q[2];
M[1][1] = q[3];
M[1][2] = 5;
M[2][0] = 2*q[4]/q[1];
M[2][1] = sqrt(q[0]) + 4;
M[2][2] = 0;N)r?   r   )r<   r   )r   r   )rB   r   )rz   r   )
r    r'   r1   r   r   r2   r!   r$   r   r   )matrN   r^   r   r   ru   s         r*   test_Matrix_printingr   Z  s}    !A#y!a%14y93q6B
CCS!QAS&   VQqT!A$K())))a$iQ'!D'49C$LH1T7RDT?! ! ! 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<!+Q/1 	2A Q>

 

 

r)   c                      \         p \        . RO4      pV ! V4      R8X  g   Q hV ! VP                  4       4      R8X  g   Q hR# )r<   zfloat[7](1, 2, 3, 4, 5, 6, 7)Nr<   r?   rB   rz            )r$   r    	transposeglrN   s     r*   test_Matrices_1x7r     s>    	BAa53333akkm ????r)   c                  N    \         p \        . RO4      pV ! VRR7      R8X  g   Q hR# )r<   int)
array_typezint[7](1, 2, 3, 4, 5, 6, 7)Nr   )r$   r    r   s     r*    test_Matrices_1x7_array_type_intr     s'    	BAaE"&CCCCr)   c                  L    \         p \        R 4      pV ! VRRR7      R8X  g   Q hR# )a b cAbcTypeF)r   ry   zAbcType[3](a, b, c)N)r$   r   r   s     r*   test_Tuple_array_type_customr     s)    	BAaI%8<QQQQr)   c                      \         p \        . RO4      p\        R4      pV ! WR7      \        P                  ! R4      8X  g   Q hR# )r<   zx.a x.b x.c x.d x.e x.f x.grS   zv        x.a = 1;
        x.b = 2;
        x.c = 3;
        x.d = 4;
        x.e = 5;
        x.f = 6;
        x.g = 7;Nr   )r$   r    r   textwrapdedent)r   rN   rT   s      r*   *test_Matrices_1x7_spread_assign_to_symbolsr     sC    	BA56Ia% : *   r)   c                      \         p Rp\        R4      \        R4      3pV ! WR7      \        P                  ! R4      8X  g   Q hR# )r<   r   x y zrS   Y        a = 1;
        b = 2;
        c = 3;
        x = 1;
        y = 2;
        z = 3;N)r{   r{   r$   r   r   r   r   r^   rT   s      r*   $test_spread_assign_to_nested_symbolsr     sG    	BD!77#34Id(HOO = -   r)   c                      \         p \        R 4      w  rr4rVRpW3V3WE3V33pV ! WxR7      \        P                  ! R4      8X  g   Q hR# )za b c x y zrS   r   N)r<   r?   rB   r   r   )	r   r   r   r[   r'   r1   r2   r^   rT   s	            r*   +test_spread_assign_to_deeply_nested_symbolsr     sZ    	B}-A!!D&!vqk*Id(HOO = -   r)   c                  ,   \         p \        4       ;_uu_ 4        \        RR.R	R
..4      pRRR4       \        R4      \        R4      \        R4      \        R4      3pV ! XV4      \        P
                  ! R4      8X  g   Q hR#   + '       g   i     L`; i)r<   Nza bzc dze fzg hzw        a = 1;
        b = 2;
        c = 3;
        d = 4;
        e = 5;
        f = 6;
        g = 7;
        h = 8;r   )rB   rz   )r   r   )r      )r$   r   r    r   r   r   r   s      r*   .test_matrix_of_tuples_spread_assign_to_symbolsr     s|    	B		!	!e}eE]34 
"PIdI(// 3 	# 	 	 	 
"	!s   BB	c                  N   a a Ro\        R4      o \        \        V V3R l4       R# )r<   r   c                     < \        SS 4      # r]   r#   rT   r^   s   r*   r_   ?test_cannot_assign_to_cause_mismatched_length.<locals>.<lambda>  s    yy9r)   Nr   )r   r   ra   r   s   @@r*   -test_cannot_assign_to_cause_mismatched_lengthr     s    D I
:9:r)   c                      \         p \        R ^^4      \        R^^4      ,          \        R^^4      ,           p\        R^^4      pV ! WR7      \        P                  ! R4      8X  g   Q hR# )rN   rq   CXrS   a/          X[0][0] = A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0] + A[0][3]*B[3][0] + C[0][0];
        X[0][1] = A[0][0]*B[0][1] + A[0][1]*B[1][1] + A[0][2]*B[2][1] + A[0][3]*B[3][1] + C[0][1];
        X[0][2] = A[0][0]*B[0][2] + A[0][1]*B[1][2] + A[0][2]*B[2][2] + A[0][3]*B[3][2] + C[0][2];
        X[0][3] = A[0][0]*B[0][3] + A[0][1]*B[1][3] + A[0][2]*B[2][3] + A[0][3]*B[3][3] + C[0][3];
        X[1][0] = A[1][0]*B[0][0] + A[1][1]*B[1][0] + A[1][2]*B[2][0] + A[1][3]*B[3][0] + C[1][0];
        X[1][1] = A[1][0]*B[0][1] + A[1][1]*B[1][1] + A[1][2]*B[2][1] + A[1][3]*B[3][1] + C[1][1];
        X[1][2] = A[1][0]*B[0][2] + A[1][1]*B[1][2] + A[1][2]*B[2][2] + A[1][3]*B[3][2] + C[1][2];
        X[1][3] = A[1][0]*B[0][3] + A[1][1]*B[1][3] + A[1][2]*B[2][3] + A[1][3]*B[3][3] + C[1][3];
        X[2][0] = A[2][0]*B[0][0] + A[2][1]*B[1][0] + A[2][2]*B[2][0] + A[2][3]*B[3][0] + C[2][0];
        X[2][1] = A[2][0]*B[0][1] + A[2][1]*B[1][1] + A[2][2]*B[2][1] + A[2][3]*B[3][1] + C[2][1];
        X[2][2] = A[2][0]*B[0][2] + A[2][1]*B[1][2] + A[2][2]*B[2][2] + A[2][3]*B[3][2] + C[2][2];
        X[2][3] = A[2][0]*B[0][3] + A[2][1]*B[1][3] + A[2][2]*B[2][3] + A[2][3]*B[3][3] + C[2][3];
        X[3][0] = A[3][0]*B[0][0] + A[3][1]*B[1][0] + A[3][2]*B[2][0] + A[3][3]*B[3][0] + C[3][0];
        X[3][1] = A[3][0]*B[0][1] + A[3][1]*B[1][1] + A[3][2]*B[2][1] + A[3][3]*B[3][1] + C[3][1];
        X[3][2] = A[3][0]*B[0][2] + A[3][1]*B[1][2] + A[3][2]*B[2][2] + A[3][3]*B[3][2] + C[3][2];
        X[3][3] = A[3][0]*B[0][3] + A[3][1]*B[1][3] + A[3][2]*B[2][3] + A[3][3]*B[3][3] + C[3][3];N)r$   r!   r   r   r   s      r*   test_matrix_4x4_assignr     sg    	BAa <Aa#88<Aa;PPDS1%Id(HOO =f -   r)   c                     \         p \        ^^
4       F  p\        \        V4      4      pV ! VP                  4       4      V ! V4      8X  g   Q hV ! VRR7      V ! V4      8X  g   Q hV^8  g   KZ  V^8:  d:   V ! V4      RV: RRP	                  R \        V4       4       4      : R28X  g   Q hK  V ! V4      RV: R	RP	                  R
 \        V4       4       4      : R28X  d   K  Q h	  R# )r<   Tmat_transposevec(z, c              3   8   "   T F  p\        V4      x  K  	  R # 5ir]   str.0rc   s   & r*   	<genexpr> test_1xN_vecs.<locals>.<genexpr>  s     :T8a3q668   )float[z](c              3   8   "   T F  p\        V4      x  K  	  R # 5ir]   r   r   s   & r*   r   r     s     >Xx!s1vvxr   N)r$   ranger    r   join)r   rO   rN   s      r*   test_1xN_vecsr     s    	B1R[58!++- BqE)))!$'2a5000q5Av!uq:T5QR8:T1T UUUU!u1TYY>XuUVx>X5X YYYY r)   c                  V   R p \        ^^4       EFQ  p\        ^^4       EF<  p\        \        V4       UUu. uF*  p\        V4       Uu. uF  qDW2,          ,           NK  	  upNK,  	  upp4      p\        V4      p\        VRR7      pV R\        4       P	                  V4      ,           R,           ,          p V RV,           R,           ,          p V RV,           R,           ,          p V R	,          p V R
,          p V^8X  d   V^8X  d   VR8X  g   Q hK  V^8:  dY   V^8:  dR   V^8  dK   V^8  dD   VP                  RV,          4      '       g   Q hVP                  RV,          4      '       g   Q hEKM  V^8X  d$   V^8:  d   VP                  R4      '       g   Q hEKw  V^8X  d$   V^8:  d   VP                  R4      '       g   Q hEK  V^8X  dR   VP                  RV,          V,          4      '       g   Q hVP                  RV,          V,          4      '       g   Q hEK  V^8X  dR   VP                  RV,          V,          4      '       g   Q hVP                  RV,          V,          4      '       g   Q hEKQ  VP                  RW,          ,          4      '       g   Q hVP                  RW,          ,          4      '       g   Q h\        VRR7      p\        VRRR7      p	VP                  RV: RV: R24      '       g   Q hV	P                  RV: RV: R24      '       g   Q hV RV,           R,           ,          p V RV	,           R,           ,          p V R,          p V R,          p EK?  	  EKT  	  Rp
V
'       d0   \        RR4      pVP                  V 4       VP                  4        R# R# u upi u uppi )zdef test_misc_mats():
Tr   z
    mat = z

z    gl = '''z'''
z    glTransposed = '''z'''

z     assert glsl_code(mat) == gl
z=    assert glsl_code(mat,mat_transpose=True) == glTransposed
0zmat%sr   z
float[%s](
mat_nested)r   r   r   z][]z    glNested = '''z    glNestedTransposed = '''z6    assert glsl_code(mat,mat_nested=True) == glNested
zT    assert glsl_code(mat,mat_nested=True,mat_transpose=True) == glNestedTransposed

Fztest_glsl_generated_matrices.pywN)	r   r    r$   r   _print
startswithopenwriteclose)generatedAssertionsrO   ro   r1   r'   rN   r   glTransposedglNestedglNestedTransposedgenerateAssertionsgens               r*   test_MxN_matsr     s   11QZqAU1XFX%(3(QQS(3XFGA1B$QT:Ljl.A.A!.D!DV!KK!22!5j!@@!<\!I,!VV!DD!aaAv!q&Sy yaAFqsqs}}Wq[1111#..w{;;;;aAF}}U++++aAF}}U++++a}}\1_Q%67777#..|Qq/@AAAAa}}\1_Q%67777#..|Qq/@AAAA}}\QS%9::::#..|qs/CDDDD$Q$7%.qtt%T"**a+BCCCC)44!5LMMMM#%<X%Ej%PP##%FGY%YZf%ff##%^^##%}}#E  H 4S9		%&		 G 4Fs   N%N N% N%c                  z   \        ^ ..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        ^ ^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R9O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R:O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R;O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        ^ .^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        ^ ^.^^..4      p RpR	p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R9O. R<O.4      p R
pRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R:O. R=O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R;O. R>O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hRpRp\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q h\        ^ .^.^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        ^ ^.^^.^^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R9O. R<O. R?O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R:O. R=O. R@O.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R;O. R>O. RAO.4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hRpRp\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q h\        ^ .^.^.^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        ^ ^.^^.^^.^^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R9O. R<O. R?O. RBO.4      p R pR!p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R:O. R=O. R@O. RCO.4      p R"pR#p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        . R;O. R>O. RAO. RDO.4      p R$pR%p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hR&pR'p\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q h\        ^ .^.^.^.^..4      p RpRp\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q h\        ^ ^.^^.^^.^^.^^	..4      p R(pR)p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hR*pR+p\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q h\        . R9O. R<O. R?O. RBO. REO.4      p R,pR-p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hR.pR/p\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q h\        . R:O. R=O. R@O. RCO. RFO.4      p R0pR1p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hR2pR3p\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q h\        . R;O. R>O. RAO. RDO. RGO.4      p R4pR5p\        V 4      V8X  g   Q h\        V RR7      V8X  g   Q hR6pR7p\        V RR7      V8X  g   Q h\        V RRR7      V8X  g   Q hR8# )Hr   r   Tr   z
vec2(0, 1)zvec3(0, 1, 2)zvec4(0, 1, 2, 3)zfloat[5](0, 1, 2, 3, 4)zmat2(0, 1, 2, 3)zmat2(0, 2, 1, 3)zmat3x2(0, 1, 2, 3, 4, 5)zmat2x3(0, 3, 1, 4, 2, 5)zmat4x2(0, 1, 2, 3, 4, 5, 6, 7)zmat2x4(0, 4, 1, 5, 2, 6, 3, 7)zBfloat[10](
   0, 1, 2, 3, 4,
   5, 6, 7, 8, 9
) /* a 2x5 matrix */zKfloat[10](
   0, 5,
   1, 6,
   2, 7,
   3, 8,
   4, 9
) /* a 5x2 matrix */zCfloat[2][5](
   float[](0, 1, 2, 3, 4),
   float[](5, 6, 7, 8, 9)
)zgfloat[5][2](
   float[](0, 5),
   float[](1, 6),
   float[](2, 7),
   float[](3, 8),
   float[](4, 9)
)r   )r   r   zmat2x3(0, 1, 2, 3, 4, 5)zmat3x2(0, 2, 4, 1, 3, 5)zmat3(0, 1, 2, 3, 4, 5, 6, 7, 8)zmat3(0, 3, 6, 1, 4, 7, 2, 5, 8)z0mat4x3(0, 1,  2,  3, 4, 5,  6,  7, 8, 9, 10, 11)z.mat3x4(0, 4,  8, 1, 5,  9, 2, 6, 10, 3, 7, 11)zafloat[15](
   0,  1,  2,  3,  4,
   5,  6,  7,  8,  9,
   10, 11, 12, 13, 14
) /* a 3x5 matrix */z_float[15](
   0, 5, 10,
   1, 6, 11,
   2, 7, 12,
   3, 8, 13,
   4, 9, 14
) /* a 5x3 matrix */zmfloat[3][5](
   float[]( 0,  1,  2,  3,  4),
   float[]( 5,  6,  7,  8,  9),
   float[](10, 11, 12, 13, 14)
)z{float[5][3](
   float[](0, 5, 10),
   float[](1, 6, 11),
   float[](2, 7, 12),
   float[](3, 8, 13),
   float[](4, 9, 14)
)zmat2x4(0, 1, 2, 3, 4, 5, 6, 7)zmat4x2(0, 2, 4, 6, 1, 3, 5, 7)z2mat3x4(0,  1,  2, 3,  4,  5, 6,  7,  8, 9, 10, 11)z-mat4x3(0, 3, 6,  9, 1, 4, 7, 10, 2, 5, 8, 11)zDmat4( 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15)z<mat4(0, 4,  8, 12, 1, 5,  9, 13, 2, 6, 10, 14, 3, 7, 11, 15)zxfloat[20](
   0,  1,  2,  3,  4,
   5,  6,  7,  8,  9,
   10, 11, 12, 13, 14,
   15, 16, 17, 18, 19
) /* a 4x5 matrix */zsfloat[20](
   0, 5, 10, 15,
   1, 6, 11, 16,
   2, 7, 12, 17,
   3, 8, 13, 18,
   4, 9, 14, 19
) /* a 5x4 matrix */zfloat[4][5](
   float[]( 0,  1,  2,  3,  4),
   float[]( 5,  6,  7,  8,  9),
   float[](10, 11, 12, 13, 14),
   float[](15, 16, 17, 18, 19)
)zfloat[5][4](
   float[](0, 5, 10, 15),
   float[](1, 6, 11, 16),
   float[](2, 7, 12, 17),
   float[](3, 8, 13, 18),
   float[](4, 9, 14, 19)
)zKfloat[10](
   0, 1,
   2, 3,
   4, 5,
   6, 7,
   8, 9
) /* a 5x2 matrix */zBfloat[10](
   0, 2, 4, 6, 8,
   1, 3, 5, 7, 9
) /* a 2x5 matrix */zgfloat[5][2](
   float[](0, 1),
   float[](2, 3),
   float[](4, 5),
   float[](6, 7),
   float[](8, 9)
)zCfloat[2][5](
   float[](0, 2, 4, 6, 8),
   float[](1, 3, 5, 7, 9)
)zefloat[15](
   0,  1,  2,
   3,  4,  5,
   6,  7,  8,
   9, 10, 11,
   12, 13, 14
) /* a 5x3 matrix */zZfloat[15](
   0, 3, 6,  9, 12,
   1, 4, 7, 10, 13,
   2, 5, 8, 11, 14
) /* a 3x5 matrix */zfloat[5][3](
   float[]( 0,  1,  2),
   float[]( 3,  4,  5),
   float[]( 6,  7,  8),
   float[]( 9, 10, 11),
   float[](12, 13, 14)
)zdfloat[3][5](
   float[](0, 3, 6,  9, 12),
   float[](1, 4, 7, 10, 13),
   float[](2, 5, 8, 11, 14)
)zzfloat[20](
   0,  1,  2,  3,
   4,  5,  6,  7,
   8,  9, 10, 11,
   12, 13, 14, 15,
   16, 17, 18, 19
) /* a 5x4 matrix */zrfloat[20](
   0, 4,  8, 12, 16,
   1, 5,  9, 13, 17,
   2, 6, 10, 14, 18,
   3, 7, 11, 15, 19
) /* a 4x5 matrix */zfloat[5][4](
   float[]( 0,  1,  2,  3),
   float[]( 4,  5,  6,  7),
   float[]( 8,  9, 10, 11),
   float[](12, 13, 14, 15),
   float[](16, 17, 18, 19)
)zfloat[4][5](
   float[](0, 4,  8, 12, 16),
   float[](1, 5,  9, 13, 17),
   float[](2, 6, 10, 14, 18),
   float[](3, 7, 11, 15, 19)
)zfloat[25](
   0,  1,  2,  3,  4,
   5,  6,  7,  8,  9,
   10, 11, 12, 13, 14,
   15, 16, 17, 18, 19,
   20, 21, 22, 23, 24
) /* a 5x5 matrix */zfloat[25](
   0, 5, 10, 15, 20,
   1, 6, 11, 16, 21,
   2, 7, 12, 17, 22,
   3, 8, 13, 18, 23,
   4, 9, 14, 19, 24
) /* a 5x5 matrix */zfloat[5][5](
   float[]( 0,  1,  2,  3,  4),
   float[]( 5,  6,  7,  8,  9),
   float[](10, 11, 12, 13, 14),
   float[](15, 16, 17, 18, 19),
   float[](20, 21, 22, 23, 24)
)zfloat[5][5](
   float[](0, 5, 10, 15, 20),
   float[](1, 6, 11, 16, 21),
   float[](2, 7, 12, 17, 22),
   float[](3, 8, 13, 18, 23),
   float[](4, 9, 14, 19, 24)
)N)r   r<   r?   )r   r<   r?   rB   )r   r<   r?   rB   rz   )rB   rz   r   )rz   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   )               )r    r$   )r   r   r   r   r   s        r*   test_misc_matsr  %  sX	   
1#-C	BLS>RSt,<<<
1a&
C	B#LS>RSt,<<<
)
C	B&LS>RSt,<<<
,
 C	B)LS>RSt,<<<
/"
#C	&B0LS>RSt,<<<
 C 
B#LS>RSt,<<<
AA 	C 
 B)LS>RSt,<<<
 	 	 C 
(B1LS>RSt,<<<
   C 
.B7LS>RSt,<<<
   C
BL S>RSt,<<<H SD)X555SDt<@RRRR
 C
 
B&LS>RSt,<<<
AAA 	C
 
(B1LS>RSt,<<<
 	 	 	 C
 
/B8LS>RSt,<<<
    C
 
@BGLS>RSt,<<<
    C

B
L S>RSt,<<<H
 SD)X555SDt<@RRRR
	 C 
 B)LS>RSt,<<<
AAAA	 	C 
.B7LS>RSt,<<<
    	 C 
BBFLS>RSt,<<<
    	 C 
TBULS>RSt,<<<
    	 C
BL S>RSt,<<<H SD)X555SDt<@RRRR
 C 
'B0LS>RSt,<<<
AAAAA 	C
BL
 S>RSt,<<<H
 SD)X555SDt<@RRRR
      C
BL S>RSt,<<<H SD)X555SDt<@RRRR
      C
BL S>RSt,<<<H SD)X555SDt<@RRRR
      C
BL S>RSt,<<<H SD)X555SDt<@RRRRr)   )R
sympy.corer   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   sympy.functionsr   r   r   r   r   r   r   sympy.testing.pytestr   r   sympy.printing.glslr   sympy.printing.strr   sympy.utilities.lambdifyr   sympy.tensorr   r   sympy.matricesr    r!   r"   r$   r   r'   r1   r2   r+   r3   r5   r8   r:   r=   r@   rE   rJ   rL   rU   rW   rY   rd   rf   rm   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r(   r)   r*   <module>r     s  H H H H H H H H ? + ) 9 ) /  ) 
'
1a)I+)+9V4*
@ )
502C"..8:-)`)
V@D
R
 ;
.
Z*^ASr)   