
    g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 ZQdS )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          t                              dk    sJ d S )Nabs(x))r$   r   x     Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/printing/tests/test_glsl.pytest_printmethodr+      s'    SVV((((((r)   c                  Z   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 d S )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2226IIIIIQ!WU3337JJJJJQ!WU3337JJJJJQ!QV)_U;;;?`````aRTX>>>BZZZZZaRT///3HHHH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 d S )Nzsqrt(x)r.   )r$   r   r'   r(   r)   r*   test_glsl_code_sqrtr5      sc    T!WW****QV	))))T!WW******r)   c                     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 d S )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..11AQT??m++++QAY#88888Q!SA1H--q!tax89989 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 d S )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1XX(****R1XX(****R1XX(****R1XX'))))R1XX'))))R1XX(******r)   c                  ~    t          t          d                    dk    sJ t          t                    dk    sJ d S )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VV :::::R==888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 d S )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   <   sb    Q{]##'WWWWWQwY#LLLLLQz\""&UUU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 d S )
Nr9      z3.0/7.0   	   2iz-3.0/7.0)r$   r   r(   r)   r*   test_glsl_code_RationalrH   B   s    Xa^^$$	1111Xb!__%%,,,,Xa__%%3333Xb"%%&&)333333r)   c                      t          t          d                    dk    sJ t          t          d                    dk    sJ d S )NC   67z-1)r$   r   r(   r)   r*   test_glsl_code_IntegerrM   I   sF    WR[[!!T))))WR[[!!T))))))r)   c                  ~    t          t          t                    t          t                    z            dk    sJ d S )Nzpow(sin(x), cos(x)))r$   r   r'   r   r(   r)   r*   test_glsl_code_functionsrO   N   s3    SVVs1vv%&&*???????r)   c            	      8   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 d S )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..11AQQqTT??e####S&AaCK"8"899AQQqTT??IIIIICACd+++,,AS&Aq1uIq1u,=">">??AQQqtWW!---	     r)   c                      t          t          t                              dk    sJ t          t          t                              dk    sJ d S )Nzceil(x)r&   )r$   r   r'   r   r(   r)   r*   test_glsl_code_exceptionsrZ   b   sF    WQZZ  I----SVV((((((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 d S )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0QUQY=0000a!eq[!!]2222a!eq[!!_444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k    ft          t                    t          dk    f          t	          t
          fd	           d S )
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  6666TS)))	 	 	 	 aQZ!Q$AQQ@@D
:..../////r)   c                      t          dt          t          t          dk     ft          dz  df          z            } d}| |k    sJ d S )Nr8   r:   Tz+2*((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
)))r$   r   r'   )rd   re   s     r*   test_glsl_code_Piecewise_deeprh      sK    !Iq!a%j1a4,77788A  666666r)   c                  2    t          t          d            d S )Nc                  H    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AA r)   )r   	TypeErrorr(   r)   r*   test_glsl_code_settingsrn      s    
9AABBBBBr)   c                  d   t          dd          \  } }}t          d|           t          d|          t          d|          }}}t                      }t                      |_        t          d          |         }|                    |          dk    sJ t          d	          ||f         }|                    |          d
||z  |z   z  k    sJ t          d          |||f         }	|                    |	          d||z  |z  ||z  z   |z   z  k    sJ |j        t                      k    sJ d S )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      s3   gt,,,GAq!#qkk3sA;;C!qAAuuAHCAA&((((CAAA'QqSU"33333CAq!AA'QqSU1Q3Yq["999998suur)   c                  t   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 d S )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    YYY#55555WWW...2EEEEEWWW7!3!33333WWW51Q<<!8!8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 d S )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666666r)   c                     t          ddt                    \  } }t          d          }t          d          }t          | |          } d| j        j        |j        dz  }t          ||          ||                    }||k    sJ d S )	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222DAqCACAAq		A	 7&!-@@	AH
 QqTQqT***D8r)   c                  n   t          dd          \  } }t          d          }t          d          }t          d          }t          d          }t          d|          }t          d	|           }d
}t          |||f         ||         z  ||         z   ||         z   ||                   }	|	|k    sJ d S )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666666r)   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 d S )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111JAq!QCACACACACACACAA 78c!eAg!Ao!6Ka6O6O6OQRSTQTUVQVYZ[\Y\Q\_`Q`Q`Q`	b		  	!Aq!G*Qq!Qz]*ad;;;A666666r)   c                  V   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 d S )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     s   D111JAq!QCACACACACACACACAA AB!Aa!A#a%RSTURU@UXY@Y@Y@Y[\]^[^_`[`ab[befghehijej[jmnopmp[pst[t[t[tvwxyvyz{v{~  AB  B  wB  EF  wF  wF  wF	G		  	1Q1aZ=1Q1aZ=0!Aq!G*<!MMMA666666r)   c                  T   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    su|||z   |z   |d d         z   k    s`|||z   |z   |d d         z   k    sK|||z   |z   |d d         z   k    s6|||z   |z   |d d         z   k    s!|||z   |z   |d d         z   k    sJ d S d S d S d S d S d S )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   *  sO   D11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 	L 	LAb23B3'''b23B3'''b23B3'''b23B3'''b23B3'''b23B3''''' ('''''''''''r)   c            	         t          t          t          z  t          dt          z   t          dk    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k    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 d S )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993q66B
C
CCS!QASA&&&    VQqT!A$K(()))))a$iQ'!D'499C$LLH1T7RDT??! ! ! ! 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<<!+Q/1 	2 	2A Qq>>

 

 

 

 

 

r)   c                      t           } t          g d          } | |          dk    sJ  | |                                          dk    sJ d S )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2a55333332akkmm ???????r)   c                  \    t           } t          g d          } | |d          dk    sJ d S )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2aE"""&CCCCCCCr)   c                  Z    t           } t          d          } | |dd          dk    sJ d S )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2aI%888<QQQQQQQr)   c                      t           } t          g d          }t          d          } | ||          t          j        d          k    sJ d S )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     si    	BA566I2a9%%% : * *      r)   c                      t           } d}t          d          t          d          f} | ||          t          j        d          k    sJ d S )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#34I2di(((HO = - -      r)   c                      t           } t          d          \  }}}}}}d}||f|f||f|ff} | ||          t          j        d          k    sJ d S )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     s    	B}--Aq!Q1!Da&!1vqk*I2di(((HO = - -      r)   c                  F   t           } t                      5  t          ddgddgg          }d d d            n# 1 swxY w Y   t          d          t          d          t          d          t          d          f} | ||          t	          j        d	          k    sJ d S )
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 5e}eE]3445 5 5 5 5 5 5 5 5 5 5 5 5 5 5PI2dI(/ 3 	# 	# 	 	 	 	 	 	s   8<<c                  ^     dt          d           t          t           fd           d S )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9 r)   )r   r   rc   r   s   @@r*   -test_cannot_assign_to_cause_mismatched_lengthr     s9    D  I
:9999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 d S )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     s    	BAa  <Aa#8#88<Aa;P;PPDS1%%I2di(((HO =f - -      r)   c                  $   t           } t          dd          D ]}t          t          |                    } | |                                           | |          k    sJ  | |d           | |          k    sJ |dk    r|dk    rC | |          d|dd                    d	 t          |          D                       d
k    sJ  | |          d|dd                    d t          |          D                       d
k    sJ d S )Nr:   
   Tmat_transposerz   vec(z, c              3   4   K   | ]}t          |          V  d S r`   str.0re   s     r*   	<genexpr>z test_1xN_vecs.<locals>.<genexpr>  s(      :T:Ta3q66:T:T:T:T:T:Tr)   )float[z](c              3   4   K   | ]}t          |          V  d S r`   r   r   s     r*   r   z test_1xN_vecs.<locals>.<genexpr>  s(      >X>X!s1vv>X>X>X>X>X>Xr)   )r$   ranger    r   join)r   rR   rQ   s      r*   test_1xN_vecsr     s@   	B1R[[ Z Z588r!++--  BBqEE))))r!$'''22a550000q55Avvr!uuuqqq:T:T5QR88:T:T:T1T1T1T1T UUUUUUr!uuu111TYY>X>XuUVxx>X>X>X5X5X5X5X YYYYYZ Zr)   c            	        	 d} t          dd          D ]}t          dd          D ]~	t          	fdt          |          D                       }t          |          }t          |d          }| dt                                          |          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    sJ |dk    rG	dk    rA|dk    r;	dk    r5|                    d	z            sJ |                    d|z            sJ |dk    r	dk    r|                    d          sJ 	dk    r|dk    r|                    d          sJ A|dk    r<|                    d	z  |z            sJ |                    d	z  |z            sJ 	dk    r<|                    d|z  	z            sJ |                    d|z  	z            sJ |                    d|	z  z            sJ |                    d|	z  z            sJ t          |d          }t          |dd          }|                    d|d	d          sJ |                    d	d|d          sJ | d|z   d
z   z  } | d|z   dz   z  } | dz  } | dz  } d}|r;t          dd          }|                    |            |                                 d S d S ) Nzdef test_misc_mats():
r:   r   c                 J    g | ]fd t                    D             S )c                      g | ]
}|z  z   S r(   r(   )r   r'   rp   r1   s     r*   
<listcomp>z,test_MxN_mats.<locals>.<listcomp>.<listcomp>  s!    333QQqS333r)   )r   )r   r1   rp   s    @r*   r   z!test_MxN_mats.<locals>.<listcomp>  s8    FFF33333%((333FFFr)   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   rQ   r   glTransposedglNestedglNestedTransposedgenerateAssertionsgenrp   s
            @r*   test_MxN_matsr     s   11QZZ #~ #~q "	~ "	~AFFFFU1XXFFFGGA1B$QT:::Ljll.A.A!.D.D!DV!KK!22!5j!@@!<\!I,!VV!DD!aaAvv!q&&SyyyyyaAFFqssqss}}Wq[11111#..w{;;;;;;aAFF}}U++++++aAFF}}U++++++a}}\1_Q%677777#..|Qq/@AAAAAAa}}\1_Q%677777#..|Qq/@AAAAAA}}\QqS%9:::::#..|qs/CDDDDD$Q$777%.qtt%T%T%T"***aaa+BCCCCC)444!!!5LMMMMM#%<X%Ej%PP##%FGY%YZf%ff##%^^##%}}##E"	~F  4S99		%&&&		 r)   c                     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 d S )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   %  s   
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5SDt<<<@R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5SDt<<<@R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5SDt<<<@R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5SDt<<<@RRRRR
       C
BL S>>RSt,,,<<<<H SD)))X5555SDt<<<@RRRRR
                 C
BL S>>RSt,,,<<<<H SD)))X5555SDt<<<@RRRRR
                 C
BL S>>RSt,,,<<<<H SD)))X5555SDt<<<@RRR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 H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H ? ? ? ? ? ? ? ? + + + + + + ) ) ) ) ) ) 9 9 9 9 9 9 ) ) ) ) ) ) ) ) / / / / / / / /       ) ) ) ) ) ) 
''

1a) ) )I I I+ + +) ) )+ + +9 9 9V V V4 4 4* * *
@ @ @   ) ) )
5 5 50 0 02  C C C  " " "  .    .  8  :-) -) -)`)
 )
 )
V@ @ @D D D
R R R
         ; ; ;
  .
Z 
Z 
Z* * *^AS AS AS AS ASr)   