
    sgo                        d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z& d d	l m'Z' d d
lm(Z( d dl)Z) ed      \  Z*Z+Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d  Z@d! ZAd" ZBd# ZCd$ ZDd% ZEd& ZFd' ZGd( ZHd) ZId* ZJd+ ZKd, ZLd- ZMd. ZNd/ ZOd0 ZPd1 ZQy)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                  >    t        t        t                    dk(  sJ y )Nabs(x))r$   r   x     Q/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_glsl.pytest_printmethodr+      s    SV(((r)   c                     t        t        t        z  d      dk(  sJ t        t        t        z  t        z   d      dk(  sJ t        t        t        t        z   z  d      dk(  sJ t        t        t        t        z   z  d      dk(  sJ t        t        t        t        t        dz  z  z   z  d      dk(  sJ t        t         t        z
  dd	      d
k(  sJ t        t         t        z
  d      dk(  sJ y )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                      t        t        t                    dk(  sJ t        t        dz        dk(  sJ t        t        t                    dk(  sJ y )Nzsqrt(x)r.   )r$   r   r'   r(   r)   r*   test_glsl_code_sqrtr5      sG    T!W***QV	)))T!W***r)   c                  j   t        dt        t        dt        z              } t        t        dz        dk(  sJ t        t        t        dz  z        dk(  sJ t        d | t              dz  t        t        t        z  z
  z  z  t        dz  t        z   z        dk(  sJ t        t        d	z        d
k(  sJ y )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                     t        t        t        t                    dk(  sJ t        t	        t        t                    dk(  sJ t        t        t        t                    dk(  sJ t        t        t        t                    dk(  sJ t        t        t        t                    dk(  sJ t        t        t        t                    dk(  sJ y )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                  ^    t        t        d            dk(  sJ t        t              dk(  sJ y )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                      t        dt        z        dk(  sJ t        dt        z        dk(  sJ t        dt        z        dk(  sJ y )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                      t        t        dd            dk(  sJ t        t        dd            dk(  sJ t        t        dd            dk(  sJ t        t        d	d            dk(  sJ y )
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                  h    t        t        d            dk(  sJ t        t        d            dk(  sJ y )NC   67z-1)r$   r   r(   r)   r*   test_glsl_code_IntegerrM   I   s0    WR[!T)))WR[!T)))r)   c                  ^    t        t        t              t        t              z        dk(  sJ y )Nzpow(sin(x), cos(x)))r$   r   r'   r   r(   r)   r*   test_glsl_code_functionsrO   N   s#    SVs1v%&*????r)   c            	         t        d      } t        dt        | d| z              }t         ||             dk(  sJ t        dt        | d| z  t        z              }t         ||             dk(  sJ t        d      }t        dt        dd	
            }t        dt        | | d| z   z  d| z   z              }t         |||         ||         dk(  sJ y )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&Aq1uIq1u,=">?AQqtW!-	  r)   c                  x    t        t        t                    dk(  sJ t        t        t                    dk(  sJ y )Nzceil(x)r&   )r$   r   r'   r   r(   r)   r*   test_glsl_code_exceptionsrZ   b   s0    WQZ I---SV(((r)   c                     t        t        t        z        dk(  sJ t        t        t        z        dk(  sJ t        t               dk(  sJ t        t        t        z  t        z        dk(  sJ t        t        t        z  t        z        dk(  sJ t        t        t        z  t        z        dk(  sJ t        t        t        z  t        z        dk(  sJ y )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                  <   t        t        t        dk  ft        dz  df      t              } d}| |k(  sJ t        d      dk(  sJ t        t        t        dk  ft        dz  t        dkD  ft        t              t        dkD  f      t	        t
        fd	       y )
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               S Nr#   )exprs   r*   <lambda>z*test_glsl_code_Piecewise.<locals>.<lambda>   s    y r)   )r   r'   r$   r   r   
ValueError)psra   s     @r*   test_glsl_code_Piecewiserf   q   s    aQZ!Q$.D$A  6M6TS)	 	 	 aQZ!Q$AQQ@D
:./r)   c                  r    t        dt        t        t        dk  ft        dz  df      z        } d}| |k(  sJ y )Nr8   r:   Tz+2*((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
)))r$   r   r'   )rd   re   s     r*   test_glsl_code_Piecewise_deeprh      s?    !Iq!a%j1a4,778A  6M6r)   c                  &    t        t        d        y )Nc                  6    t        t        t              d      S )Ngarbage)method)r$   r   r'   r(   r)   r*   rb   z)test_glsl_code_settings.<locals>.<lambda>   s    iAyA r)   )r   	TypeErrorr(   r)   r*   test_glsl_code_settingsrn      s    
9ABr)   c                     t        dd      \  } }}t        d|       t        d|      t        d|      }}}t               }t               |_        t        d      |   }|j                  |      dk(  sJ t        d	      ||f   }|j                  |      d
||z  |z   z  k(  sJ t        d      |||f   }	|j                  |	      d||z  |z  ||z  z   |z   z  k(  sJ |j                  t               k(  sJ y )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   rp   rq   rd   r'   rQ   rr   s
             r*   test_glsl_code_Indexedrx      s    gt,GAq!#qk3sA;C!qAAuAHCAA&(((CAAA'QqSU"3333CAq!AA'QqSU1Q3Yq["999988sur)   c                     t        g d      dk(  sJ t        g dd      dk(  sJ t        g d      t        d      k(  sJ t        g d      t        t        ddd	            k(  sJ t        d
d	d      } t        | d   | d   g      sJ y )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   rz   r   )r$   r"   r!   )rv   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                      t        dd      \  } }t        d      }t        d      }t        d      }t        d|      }t        d|       }d	}t        |||f   ||   z  ||   
      }||k(  sJ y )Nn mTrT   rQ   r'   r1   rR   rp   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   rv   rQ   r'   r1   rR   rp   re   r^   s	            r*   "test_glsl_code_loops_matrix_vectorr      s}    5$'DAqCACACACACA	  	!AqD'!A$,!A$/A6M6r)   c                      t        ddt              \  } }t        d      }t        d      }t        | |      } d| j                  j
                  |j
                  dz  }t        ||    ||          }||k(  sJ y )	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   rv   r'   r1   expectedcodes         r*   test_dummy_loopsr      s|    5$E2DAqCACAAq	A	 77&&!--@	AH
 QqTQqT*D8r)   c                     t        dd      \  } }t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }d
}t        |||f   ||   z  ||   z   ||   z   ||         }	|	|k(  sJ y )Nr   TrT   rQ   r'   r1   r2   rR   rp   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   rv   rQ   r'   r1   r2   rR   rp   re   r^   s
             r*   test_glsl_code_loops_addr      s    5$'DAqCACACACACACA	  	!AqD'!A$,1%!,!=A6M6r)   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d|      }t        d|       }t        d	|      }	t        d
|      }
d|| z  |z  |z  ||z  |z  z   |	|z  z   |
z   d||z  |z  |	|z  z   |
z   ddz   }t        |||	|
f   ||||	|
f   z  ||         }||k(  sJ y )Nn m o pTrT   abr1   rR   rp   rq   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   rv   rw   rd   r   r   r1   rR   rp   rq   r   re   r^   s                r*   *test_glsl_code_loops_multiple_contractionsr      s    D1JAq!QCACACACACACACA 78c!eAg!Ao!6Ka6OQRSTQTUVQVYZ[\Y\Q\_`Q`	b		  	!Aq!G*Qq!Qz]*ad;A6M6r)   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }	t        d
|      }
t        d|      }d|| z  |z  |z  |	|z  |z  z   |
|z  z   |z   d|| z  |z  |z  |	|z  |z  z   |
|z  z   |z   d|	|z  |z  |
|z  z   |z   ddz   }t        |||	|
|f   |||	|
|f   z   ||	|
|f   z  ||         }||k(  sJ y )Nr   TrT   r   r   r^   r1   rR   rp   rq   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   rv   rw   rd   r   r   r^   r1   rR   rp   rq   r   re   s                r*   test_glsl_code_loops_addfactorr     sg   D1JAq!QCACACACACACACACA AB!Aa!A#a%RSTURU@UXY@Y[\]^[^_`[`ab[befghehijej[jmnopmp[pst[tvwxyvyz{v{~  AB  B  wB  EF  wF	G		  	1Q1aZ=1Q1aZ=0!Aq!G*<!MA6M6r)   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }	t        d
|      }
d}d|| z  |z  |	|z  z   |
z   z  dz   }d||z  |
z   z  dz   }d|| z  |	z   z  dz   }t        ||	   |||	f   z  ||
   |||
f   z  z   ||	   ||
   z  |||	|
f   z  z   ||         }|||z   |z   |d d z   k(  s\|||z   |z   |d d z   k(  sJ|||z   |z   |d d z   k(  s8|||z   |z   |d d z   k(  s&|||z   |z   |d d z   k(  s|||z   |z   |d d z   k(  sJ y y y y y y )Nr   TrT   r   r   r^   r1   rR   rp   rq   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   rv   rw   rd   r   r   r^   r1   rR   rp   rq   s0s1s2s3s                  r*   #test_glsl_code_loops_multiple_termsr   *  s	   D1JAq!QCACACACACACACA	 	4 89s1uqs{Q	H			 	,/0sQw	8		 	,/0sQw	8		  		!Qq!tWqtAadG|#ad1Q4i!Q'
&::ad	LAb23B''b23B''b23B''b23B''b23B''b23B'') (
 ( ( ( ( ( (r)   c            	         t        t        t        z  t        dt        z   t        dkD  ft        df      t	        t
              g      } t        ddd      }t        | |      dk(  sJ t        t        |d   |d   g            sJ t        d|d	   z  t        dkD  f|d	   df      t	        |d
         z   |d   z   }t        |      dk(  sJ t        ddd      }t        ddd      }t        t	        |d
         dt        |d	         g|d
   |d	   z   |d   dgd|d   z  |d
   z  t        |d         dz   dgg      }t        ||      dk(  sJ y )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   )rz   r   rz   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   rv   s         r*   test_Matrix_printingr   Z  s~    !A#y!a%14y93q6B
CCS!QASA&   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 Qq>

 

 

r)   c                  z    t         } t        g d      } | |      dk(  sJ  | |j                               dk(  sJ y )Nr:   r8   r9   rz   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                  H    t         } t        g d      } | |d      dk(  sJ y )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                  F    t         } t        d      } | |dd      dk(  sJ y )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                      t         } t        g d      }t        d      } | ||      t        j                  d      k(  sJ y )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     sE    	BA56Ia9% : *   r)   c                      t         } d}t        d      t        d      f} | ||      t        j                  d      k(  sJ y )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     sI    	BD!77#34Idi(HOO = -   r)   c                      t         } t        d      \  }}}}}}d}||f|f||f|ff} | ||      t        j                  d      k(  sJ y )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     sf    	B}-Aq!Q1!Da&!1vqk*Idi(HOO = -   r)   c                     t         } t               5  t        ddgddgg      }d d d        t        d      t        d      t        d      t        d      f} | |      t	        j
                  d	      k(  sJ y # 1 sw Y   UxY w)
Nr   )r9   rz   )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     s    	B		! 5e}eE]345PIdI(// 3 	# 	 	 	5 5s   A77B c                  J     dt        d       t        t         fd       y )Nr   r   c                      t               S r`   r#   rW   ra   s   r*   rb   z?test_cannot_assign_to_cause_mismatched_length.<locals>.<lambda>  s    yy9 r)   )r   r   rc   r   s   @@r*   -test_cannot_assign_to_cause_mismatched_lengthr     s    D I
:9:r)   c                      t         } t        ddd      t        ddd      z  t        ddd      z   }t        ddd      } | ||      t        j                  d      k(  sJ y )NrQ   rz   rr   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     si    	BAa <Aa#88<Aa;PPDS1%Idi(HOO =f -   r)   c                     t         } t        dd      D ]  }t        t        |            } | |j                                | |      k(  sJ  | |d       | |      k(  sJ |dkD  sS|dk  r4 | |      d|ddj	                  d	 t        |      D              d
k(  rJ  | |      d|ddj	                  d t        |      D              d
k(  rJ  y )Nr:   
   Tmat_transposerz   vec(z, c              3   2   K   | ]  }t        |        y wr`   str.0re   s     r*   	<genexpr>z test_1xN_vecs.<locals>.<genexpr>  s     :Ta3q6:T   )float[z](c              3   2   K   | ]  }t        |        y wr`   r   r   s     r*   r   z test_1xN_vecs.<locals>.<genexpr>  s     >X!s1v>Xr   )r$   ranger    r   join)r   rR   rQ   s      r*   test_1xN_vecsr     s    	B1R[ Z58!++- BqE)))!$'2a5000q5Av!uq:T5QR8:T1T UUUU!u1TYY>XuUVx>X5X YYYYZr)   c                  L   d} t        dd      D ]U  }t        dd      D ]B  }t        t        |      D cg c]!  }t        |      D cg c]
  }|||z  z    c}# c}}      }t        |      }t        |d      }| dt               j	                  |      z   dz   z  } | d|z   d	z   z  } | d
|z   dz   z  } | dz  } | dz  } |dk(  r|dk(  r|dk(  rJ |dk  r<|dk  r7|dkD  r2|dkD  r-|j                  d|z        sJ |j                  d|z        rJ |dk(  r|dk  r|j                  d      rJ |dk(  r|dk  r|j                  d      r.J |dk(  r4|j                  d|z  |z        sJ |j                  d|z  |z        rgJ |dk(  r4|j                  d|z  |z        sJ |j                  d|z  |z        rJ |j                  d||z  z        sJ |j                  d||z  z        sJ t        |d      }t        |dd      }	|j                  d|d|d      sJ |	j                  d|d|d      sJ | d|z   d	z   z  } | d|	z   dz   z  } | dz  } | dz  } E X d}
|
r.t        dd      }|j                  |        |j                          y y c c}w c c}}w )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
0rz   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   rp   r1   r'   rQ   r   glTransposedglNestedglNestedTransposedgenerateAssertionsgens               r*   test_MxN_matsr     s   11QZ #~q "	~AU1XF%(3QQqS3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#..w{;;;aAF}}U+++aAF}}U+++a}}\1_Q%6777#..|Qq/@AAAa}}\1_Q%6777#..|Qq/@AAA}}\QqS%9:::#..|qs/CDDD$Q$7%.qtt%T"**a+BCCC)44!5LMMM#%<X%Ej%PP##%FGY%YZf%ff##%^^##%}}#E"	~#~H 4S9		%&		 G 4Fs   J JJ J c                  x   t        dgg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        ddgg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        g dg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        g d	g      } d
}d
}t        |       |k(  sJ t        | d      |k(  sJ t        g dg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        dgdgg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        ddgddgg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        g dg dg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        g d	g dg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        g dg dg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ d}d}t        | d      |k(  sJ t        | dd      |k(  sJ t        dgdgdgg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        ddgddgddgg      } d }d!}t        |       |k(  sJ t        | d      |k(  sJ t        g dg dg d"g      } d#}d$}t        |       |k(  sJ t        | d      |k(  sJ t        g d	g dg d%g      } d&}d'}t        |       |k(  sJ t        | d      |k(  sJ t        g dg dg d(g      } d)}d*}t        |       |k(  sJ t        | d      |k(  sJ d+}d,}t        | d      |k(  sJ t        | dd      |k(  sJ t        dgdgdgdgg      } d
}d
}t        |       |k(  sJ t        | d      |k(  sJ t        ddgddgddgd-d.gg      } d/}d0}t        |       |k(  sJ t        | d      |k(  sJ t        g dg dg d"g d1g      } d2}d3}t        |       |k(  sJ t        | d      |k(  sJ t        g d	g dg d%g d4g      } d5}d6}t        |       |k(  sJ t        | d      |k(  sJ t        g dg dg d(g d7g      } d8}d9}t        |       |k(  sJ t        | d      |k(  sJ d:}d;}t        | d      |k(  sJ t        | dd      |k(  sJ t        dgdgdgdgdgg      } d}d}t        |       |k(  sJ t        | d      |k(  sJ t        ddgddgddgd-d.gd<d=gg      } d>}d?}t        |       |k(  sJ t        | d      |k(  sJ d@}dA}t        | d      |k(  sJ t        | dd      |k(  sJ t        g dg dg d"g d1g dBg      } dC}dD}t        |       |k(  sJ t        | d      |k(  sJ dE}dF}t        | d      |k(  sJ t        | dd      |k(  sJ t        g d	g dg d%g d4g dGg      } dH}dI}t        |       |k(  sJ t        | d      |k(  sJ dJ}dK}t        | d      |k(  sJ t        | dd      |k(  sJ t        g dg dg d(g d7g dLg      } dM}dN}t        |       |k(  sJ t        | d      |k(  sJ dO}dP}t        | d      |k(  sJ t        | dd      |k(  sJ y )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   rz   zfloat[5](0, 1, 2, 3, 4)r8   r9   zmat2(0, 1, 2, 3)zmat2(0, 2, 1, 3))r9   rz   r   zmat3x2(0, 1, 2, 3, 4, 5)zmat2x3(0, 3, 1, 4, 2, 5))rz   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   rz   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\   rf   rh   rn   rx   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)   