
    \ho                        S SK JrJrJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJr  S SKJrJrJrJrJrJrJr  S SKJrJr  S SKJr  S SKJr  S SKJ r   S SK!J"r"J#r#  S SK$J%r%J&r&  S S	K J'r'  S S
KJ(r(  S SK)r)\" S5      u  r*r+r,S r-S r.S r/S r0S r1S r2S r3S r4S r5S r6S r7S r8S r9S r:S r;S r<S r=S r>S r?S  r@S! rAS" rBS# rCS$ rDS% rES& rFS' rGS( rHS) rIS* rJS+ rKS, rLS- rMS. rNS/ rOS0 rPS1 rQg)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                  @    [        [        [        5      5      S:X  d   eg )Nabs(x))r$   r   x     V/var/www/auris/envauris/lib/python3.13/site-packages/sympy/printing/tests/test_glsl.pytest_printmethodr+      s    SV(((r)   c                     [        [        [        -  SS9S:X  d   e[        [        [        -  [        -   SS9S:X  d   e[        [        [        [        -   -  SS9S:X  d   e[        [        [        [        -   -  SS9S:X  d   e[        [        [        [        [        S-  -  -   -  SS9S:X  d   e[        [        * [        -
  SSS	9S
:X  d   e[        [        * [        -
  SS9S:X  d   eg )NF)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))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                      [        [        [        5      5      S:X  d   e[        [        S-  5      S:X  d   e[        [        [        5      5      S:X  d   eg )Nzsqrt(x)r.   )r$   r   r'   r(   r)   r*   test_glsl_code_sqrtr5      sG    T!W***QV	)))T!W***r)   c                  r   [        S[        [        S[        -  5      5      n [        [        S-  5      S:X  d   e[        [        [        S-  -  5      S:X  d   e[        SU " [        5      S-  [        [        [        -  -
  -  -  [        S-  [        -   -  5      S:X  d   e[        [        S	-  5      S
:X  d   eg )Ng      z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)g      z1.0/x)r   r
   r'   r$   r1   )r7   s    r*   test_glsl_code_Powr;   #   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                     [        [        [        [        5      5      S:X  d   e[        [	        [        [        5      5      S:X  d   e[        [        [        [        5      5      S:X  d   e[        [        [        [        5      5      S:X  d   e[        [        [        [        5      5      S:X  d   e[        [        [        [        5      5      S:X  d   eg )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	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                  b    [        [        S5      5      S:X  d   e[        [        5      S:X  d   eg )Nr:   zfloat E = 2.71828183;
Ezfloat pi = 3.14159265;
pi)r$   r   r   r(   r)   r*   test_glsl_code_constants_mathhr?   5   s-    SV ::::R=8888r)   c                      [        S[        -  5      S:X  d   e[        S[        -  5      S:X  d   e[        S[        -  5      S:X  d   eg )Nr8   z-float GoldenRatio = 1.61803399;
2*GoldenRatioz&float Catalan = 0.915965594;
2*Catalanz,float EulerGamma = 0.577215665;
2*EulerGamma)r$   r   r	   r   r(   r)   r*   test_glsl_code_constants_otherrA   <   sJ    Q{]#'WWWWQwY#LLLLQz\"&UUUUr)   c                      [        [        SS5      5      S:X  d   e[        [        SS5      5      S:X  d   e[        [        SS5      5      S:X  d   e[        [        S	S5      5      S:X  d   eg )
Nr9      z3.0/7.0   	   2iz-3.0/7.0)r$   r   r(   r)   r*   test_glsl_code_RationalrH   B   sg    Xa^$	111Xb!_%,,,Xa_%333Xb"%&)333r)   c                  l    [        [        S5      5      S:X  d   e[        [        S5      5      S:X  d   eg )NC   67z-1)r$   r   r(   r)   r*   test_glsl_code_IntegerrM   I   s0    WR[!T)))WR[!T)))r)   c                  `    [        [        [        5      [        [        5      -  5      S:X  d   eg )Nzpow(sin(x), cos(x)))r$   r   r'   r   r(   r)   r*   test_glsl_code_functionsrO   N   s#    SVs1v%&*????r)   c            	         [        S5      n [        S[        U SU -  5      5      n[        U" U 5      5      S:X  d   e[        S[        U SU -  [        -  5      5      n[        U" U 5      5      S:X  d   e[        S5      n[        S[        SS	S
95      n[        S[        X SU -   -  SU -   -  5      5      n[        U" X#   5      X#   S9S:X  d   eg )Nr'   r7   r8   z2*xz(float Catalan = 0.915965594;
2*x/CatalanAinTintegerr:   	assign_toz@for (int i=0; i<n; i++){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r   r
   r$   r	   r   r   )r'   r7   rQ   rR   s       r*   test_glsl_code_inline_functionrX   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                  |    [        [        [        5      5      S:X  d   e[        [        [        5      5      S:X  d   eg )Nzceil(x)r&   )r$   r   r'   r   r(   r)   r*   test_glsl_code_exceptionsrZ   b   s0    WQZ I---SV(((r)   c                     [        [        [        -  5      S:X  d   e[        [        [        -  5      S:X  d   e[        [        ) 5      S:X  d   e[        [        [        -  [        -  5      S:X  d   e[        [        [        -  [        -  5      S:X  d   e[        [        [        -  [        -  5      S:X  d   e[        [        [        -  [        -  5      S:X  d   eg )Nzx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y)r0   r(   r)   r*   test_glsl_code_booleanr\   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                  :  ^ [        [        [        S:  4[        S-  S45      m[        T5      n SnX:X  d   e[        TSS9S:X  d   e[        [        [        S:  4[        S-  [        S:  4[        [        5      [        S:  45      m[	        [
        U4S	 j5        g )
Nr:   r8   Tz)((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
))crV   z5if (x < 1) {
   c = x;
}
else {
   c = pow(x, 2.0);
}r   c                     > [        T 5      $ Nr#   )exprs   r*   <lambda>*test_glsl_code_Piecewise.<locals>.<lambda>   s	    yr)   )r   r'   r$   r   r   
ValueError)psra   s     @r*   test_glsl_code_Piecewiserg   q   s    aQZ!Q$.D$A  6M6TS)	 	 	 aQZ!Q$AQQ@D
:./r)   c                  r    [        S[        [        [        S:  4[        S-  S45      -  5      n SnX:X  d   eg )Nr8   r:   Tz+2*((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
)))r$   r   r'   )re   rf   s     r*   test_glsl_code_Piecewise_deepri      s=    !Iq!a%j1a4,778A  6M6r)   c                  &    [        [        S 5        g )Nc                  0    [        [        [        5      SS9$ )Ngarbage)method)r$   r   r'   r(   r)   r*   rb   )test_glsl_code_settings.<locals>.<lambda>   s    iAyAr)   )r   	TypeErrorr(   r)   r*   test_glsl_code_settingsrp      s    
9ABr)   c                     [        SSS9u  pn[        SU 5      [        SU5      [        SU5      pTn[        5       n[        5       Ul        [        S5      U   nUR                  U5      S:X  d   e[        S	5      X44   nUR                  U5      S
X-  U-   -  :X  d   e[        S5      X4U4   n	UR                  U	5      SX2-  U-  XB-  -   U-   -  :X  d   eUR                  [        5       :X  d   eg )Nzn m oTrT   rR   jkr'   zx[j]rQ   zA[%s]BzB[%s])r   r   r   set_not_cr   _print_Indexed)
rS   morR   rr   rs   re   r'   rQ   rt   s
             r*   test_glsl_code_Indexedrz      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                  "   [        / SQ5      S:X  d   e[        / SQSS9S:X  d   e[        / SQ5      [        S5      :X  d   e[        / SQ5      [        [        SSS	5      5      :X  d   e[        S
S	S5      n [        U S   U S   /5      (       d   eg )N)r:   r8   r9      zvec4(1, 2, 3, 4)r:   r8   r9   F)
glsl_typeszfloat[3](1, 2, 3)r:   r8   r9   rQ   r|   r   )r$   r"   r!   )rx   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                      [        SSS9u  p[        S5      n[        S5      n[        S5      n[        SU5      n[        SU 5      nS	n[        X%U4   X6   -  XE   S
9nX:X  d   eg )Nn mTrT   rQ   r'   r1   rR   rr   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];
   }
}rV   r   r   r   r$   )	rS   rx   rQ   r'   r1   rR   rr   rf   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                      [        SS[        S9u  p[        S5      n[        S5      n[        X5      n SU R                  R
                  UR
                  S.-  n[        X    X0   S9nXT:X  d   eg )	Nzi mT)rU   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mcountrV   )r   r   r   r   labeldummy_indexr$   )rR   rx   r'   r1   expectedcodes         r*   test_dummy_loopsr      sr    5$E2DACACAA	A	 77&&!--@	AH
 QTQT*Dr)   c                      [        SSS9u  p[        S5      n[        S5      n[        S5      n[        S5      n[        SU5      n[        S	U 5      nS
n[        X&U4   X7   -  X6   -   XV   -   XF   S9n	X:X  d   eg )Nr   TrT   rQ   r'   r1   r2   rR   rr   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];
   }
}rV   r   )
rS   rx   rQ   r'   r1   r2   rR   rr   rf   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                  d   [        SSS9u  pp#[        S5      n[        S5      n[        S5      n[        SU5      n[        SU 5      n[        S	U5      n	[        S
U5      n
SXp-  U-  U-  X-  U-  -   X-  -   U
-   < SX-  U-  X-  -   U
-   < S3S-   n[        XXX4   XGXU
4   -  Xg   S9nX:X  d   eg )Nn m o pTrT   abr1   rR   rr   rs   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];
         }
      }
   }
}rV   r   )rS   rx   ry   re   r   r   r1   rR   rr   rs   r   rf   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6Ka6OQRQTUVQVYZY\Q\_`Q`	b		  	!qG*Q!z]*ad;A6M6r)   c                     [        SSS9u  pp#[        S5      n[        S5      n[        S5      n[        S5      n[        SU5      n[        S	U 5      n	[        S
U5      n
[        SU5      nSX-  U-  U-  X-  U-  -   X-  -   U-   < SX-  U-  U-  X-  U-  -   X-  -   U-   < SX-  U-  X-  -   U-   < S3S-   n[        XHXU4   XXXU4   -   XiX4   -  Xx   S9nXl:X  d   eg )Nr   TrT   r   r   r^   r1   rR   rr   rs   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   rV   r   )rS   rx   ry   re   r   r   r^   r1   rR   rr   rs   r   rf   s                r*   test_glsl_code_loops_addfactorr     s9   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[\[^_`[`ab[befehijej[jmnmp[pst[tvwvyz{v{~  B  wB  EF  wF	G		  	1aZ=1aZ=0!qG*<MA6M6r)   c                  ^   [        SSS9u  pp#[        S5      n[        S5      n[        S5      n[        S5      n[        SU5      n[        S	U 5      n	[        S
U5      n
SnSX-  U-  X-  -   U
-   -  S-   nSX-  U
-   -  S-   nSX-  U	-   -  S-   n[        XY   XHU	4   -  XZ   XHU
4   -  -   XY   XZ   -  XhX4   -  -   Xx   S9nXkU-   U-   US S -   :X  d\  XkU-   U-   US S -   :X  dJ  XkU-   U-   US S -   :X  d8  XkU-   U-   US S -   :X  d&  XkU-   U-   US S -   :X  d  XkU-   U-   US S -   :X  d   eg g g g g g )Nr   TrT   r   r   r^   r1   rR   rr   rs   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];
rV   rL   r   )rS   rx   ry   re   r   r   r^   r1   rR   rr   rs   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            	         [        [        [        -  [        S[        -   [        S:  4[        S45      [	        [
        5      /5      n [        SSS5      n[        XS9S:X  d   e[        [        US   US   /5      5      (       d   e[        SUS	   -  [        S:  4US	   S45      [	        US
   5      -   US   -   n[        U5      S:X  d   e[        SSS5      n[        SSS5      n[        [	        US
   5      S[        US	   5      /US
   US	   -   US   S/SUS   -  US
   -  [        US   5      S-   S//5      n[        XT5      S:X  d   eg )Nr8   r   TrQ   r9   r:   rV   z\A[0][0] = x*y;
if (y > 0) {
   A[1][0] = x + 2;
}
else {
   A[1][0] = y;
}
A[2][0] = sin(z);)r8   r   )r:   r   )r   r   zF((x > 0) ? (
   2*A[2][0]
)
: (
   A[2][0]
)) + sin(A[1][0]) + A[0][0]q   M)r9   r   )r|   r   r|   zM[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;)
r    r'   r1   r   r   r2   r!   r$   r   r   )matrQ   ra   r   r   rx   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                  ~    [         n [        / SQ5      nU " U5      S:X  d   eU " UR                  5       5      S:X  d   eg )Nr:   r8   r9   r|   r      rC   zfloat[7](1, 2, 3, 4, 5, 6, 7))r$   r    	transposeglrQ   s     r*   test_Matrices_1x7r     s>    	BAa53333akkm ????r)   c                  D    [         n [        / SQ5      nU " USS9S:X  d   eg )Nr   int)
array_typezint[7](1, 2, 3, 4, 5, 6, 7))r$   r    r   s     r*    test_Matrices_1x7_array_type_intr     s'    	BAaE"&CCCCr)   c                  B    [         n [        S5      nU " USSS9S:X  d   eg )Na b cAbcTypeF)r   r~   zAbcType[3](a, b, c))r$   r   r   s     r*   test_Tuple_array_type_customr     s)    	BAaI%8<QQQQr)   c                      [         n [        / SQ5      n[        S5      nU " XS9[        R                  " S5      :X  d   eg )Nr   zx.a x.b x.c x.d x.e x.f x.grV   zv        x.a = 1;
        x.b = 2;
        x.c = 3;
        x.d = 4;
        x.e = 5;
        x.f = 6;
        x.g = 7;)r$   r    r   textwrapdedent)r   rQ   rW   s      r*   *test_Matrices_1x7_spread_assign_to_symbolsr     sC    	BA56Ia% : *   r)   c                      [         n Sn[        S5      [        S5      4nU " XS9[        R                  " S5      :X  d   eg )N)r}   r}   r   x y zrV   Y        a = 1;
        b = 2;
        c = 3;
        x = 1;
        y = 2;
        z = 3;r$   r   r   r   r   ra   rW   s      r*   $test_spread_assign_to_nested_symbolsr     sG    	BD!77#34Id(HOO = -   r)   c                      [         n [        S5      u  pp4pVSnX4U4XE4U44nU " XxS9[        R                  " S5      :X  d   eg )Nza b c x y z)r:   r8   r9   r   rV   r   r   )	r   r   r   r^   r'   r1   r2   ra   rW   s	            r*   +test_spread_assign_to_deeply_nested_symbolsr     sZ    	B}-A!!D&!vqk*Id(HOO = -   r)   c                     [         n [        5          [        SS/SS//5      nS S S 5        [        S5      [        S5      [        S5      [        S5      4nU " WU5      [        R
                  " S	5      :X  d   eg ! , (       d  f       N\= f)
Nr   )r9   r|   )r   r   )rC      z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$   r   r    r   r   r   r   s      r*   .test_matrix_of_tuples_spread_assign_to_symbolsr     sy    	B		!e}eE]34 
"PIdI(// 3 	# 	 	 	 
"	!s   A99
Bc                  L   ^ ^ Sm[        S5      m [        [        U U4S j5        g )Nr   r   c                     > [        TT 5      $ r`   r#   rW   ra   s   r*   rb   ?test_cannot_assign_to_cause_mismatched_length.<locals>.<lambda>  s    yy9r)   )r   r   rd   r   s   @@r*   -test_cannot_assign_to_cause_mismatched_lengthr     s    D I
:9:r)   c                      [         n [        SSS5      [        SSS5      -  [        SSS5      -   n[        SSS5      nU " XS9[        R                  " S5      :X  d   eg )NrQ   r|   rt   CXrV   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];)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                     [         n [        SS5       H  n[        [        U5      5      nU " UR                  5       5      U " U5      :X  d   eU " USS9U " U5      :X  d   eUS:  d  MT  US::  a8  U " U5      SU< SSR	                  S	 [        U5       5       5      < S
3:X  d   eM  U " U5      SU< SSR	                  S [        U5       5       5      < S
3:X  a  M   e   g )Nr:   
   Tmat_transposer|   vec(z, c              3   8   #    U  H  n[        U5      v   M     g 7fr`   str.0rf   s     r*   	<genexpr> test_1xN_vecs.<locals>.<genexpr>  s     :T8a3q668   )float[z](c              3   8   #    U  H  n[        U5      v   M     g 7fr`   r   r   s     r*   r   r     s     >Xx!s1vvxr   )r$   ranger    r   join)r   rR   rQ   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                     Sn [        SS5       GH  n[        SS5       GH  n[        [        U5       VVs/ s H#  n[        U5       Vs/ s H	  oDX2-  -   PM     snPM%     snn5      n[        U5      n[        USS9nU S[        5       R	                  U5      -   S-   -  n U SU-   S	-   -  n U S
U-   S-   -  n U S-  n U S-  n US:X  a  US:X  a
  US:X  d   eM  US::  aK  US::  aE  US:  a?  US:  a9  UR                  SU-  5      (       d   eUR                  SU-  5      (       d   eGM  US:X  a!  US::  a  UR                  S5      (       d   eGM.  US:X  a!  US::  a  UR                  S5      (       d   eGMU  US:X  a?  UR                  SU-  U-  5      (       d   eUR                  SU-  U-  5      (       d   eGM  US:X  a?  UR                  SU-  U-  5      (       d   eUR                  SU-  U-  5      (       d   eGM  UR                  SX-  -  5      (       d   eUR                  SX-  -  5      (       d   e[        USS9n[        USSS9n	UR                  SU< SU< S35      (       d   eU	R                  SU< SU< S35      (       d   eU SU-   S	-   -  n U SU	-   S-   -  n U S-  n U S-  n GM     GM     Sn
U
(       a.  [        SS5      nUR                  U 5        UR                  5         g g s  snf s  snnf )Nzdef test_misc_mats():
r:   r   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
0r|   z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w)	r   r    r$   r   _print
startswithopenwriteclose)generatedAssertionsrR   rr   r1   r'   rQ   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   K6	K1K61K6c                     [        S//5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        SS//5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        / S	Q/5      n S
nS
n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        S/S//5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        SS/SS//5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/ SQ/5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        / S	Q/ SQ/5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/ SQ/5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   eSnSn[        U SS9U:X  d   e[        U SSS9U:X  d   e[        S/S/S//5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        SS/SS/SS//5      n S nS!n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/ SQ/ S"Q/5      n S#nS$n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / S	Q/ SQ/ S%Q/5      n S&nS'n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/ SQ/ S(Q/5      n S)nS*n[        U 5      U:X  d   e[        U SS9U:X  d   eS+nS,n[        U SS9U:X  d   e[        U SSS9U:X  d   e[        S/S/S/S//5      n S
nS
n[        U 5      U:X  d   e[        U SS9U:X  d   e[        SS/SS/SS/S-S.//5      n S/nS0n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/ SQ/ S"Q/ S1Q/5      n S2nS3n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / S	Q/ SQ/ S%Q/ S4Q/5      n S5nS6n[        U 5      U:X  d   e[        U SS9U:X  d   e[        / SQ/ SQ/ S(Q/ S7Q/5      n S8nS9n[        U 5      U:X  d   e[        U SS9U:X  d   eS:nS;n[        U SS9U:X  d   e[        U SSS9U:X  d   e[        S/S/S/S/S//5      n SnSn[        U 5      U:X  d   e[        U SS9U:X  d   e[        SS/SS/SS/S-S./S<S=//5      n S>nS?n[        U 5      U:X  d   e[        U SS9U:X  d   eS@nSAn[        U SS9U:X  d   e[        U SSS9U:X  d   e[        / SQ/ SQ/ S"Q/ S1Q/ SBQ/5      n SCnSDn[        U 5      U:X  d   e[        U SS9U:X  d   eSEnSFn[        U SS9U:X  d   e[        U SSS9U:X  d   e[        / S	Q/ SQ/ S%Q/ S4Q/ SGQ/5      n SHnSIn[        U 5      U:X  d   e[        U SS9U:X  d   eSJnSKn[        U SS9U:X  d   e[        U SSS9U:X  d   e[        / SQ/ SQ/ S(Q/ S7Q/ SLQ/5      n SMnSNn[        U 5      U:X  d   e[        U SS9U:X  d   eSOnSPn[        U SS9U:X  d   e[        U SSS9U:X  d   eg )QNr   r   Tr   r:   z
vec2(0, 1))r   r:   r8   zvec3(0, 1, 2))r   r:   r8   r9   zvec4(0, 1, 2, 3))r   r:   r8   r9   r|   zfloat[5](0, 1, 2, 3, 4)r8   r9   zmat2(0, 1, 2, 3)zmat2(0, 2, 1, 3))r9   r|   r   zmat3x2(0, 1, 2, 3, 4, 5)zmat2x3(0, 3, 1, 4, 2, 5))r|   r   r   rC   zmat4x2(0, 1, 2, 3, 4, 5, 6, 7)zmat2x4(0, 4, 1, 5, 2, 6, 3, 7))r   r   rC   r   rE   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   r|   r   zmat2x3(0, 1, 2, 3, 4, 5)zmat3x2(0, 2, 4, 1, 3, 5))r   rC   r   zmat3(0, 1, 2, 3, 4, 5, 6, 7, 8)zmat3(0, 3, 6, 1, 4, 7, 2, 5, 8))r   rE   r      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))r   r            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)
)r   rC   zmat2x4(0, 1, 2, 3, 4, 5, 6, 7)zmat4x2(0, 2, 4, 6, 1, 3, 5, 7))rE   r   r   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))r   r   r      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))r         rD      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)
)r   rE   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)
))r   r   r   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)
))r   r   rD   r   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)
))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   r;   r=   r?   rA   rH   rM   rO   rX   rZ   r\   rg   ri   rp   rz   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)   