U
    	-eo                     @   s  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d Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd  Z6d!d" Z7d#d$ Z8d%d& Z9d'd( Z:d)d* Z;d+d, Z<d-d. Z=d/d0 Z>d1d2 Z?d3d4 Z@d5d6 ZAd7d8 ZBd9d: ZCd;d< ZDd=d> ZEd?d@ ZFdAdB ZGdCdD ZHdEdF ZIdGdH ZJdIdJ ZKdKdL ZLdMdN ZMdOdP ZNdQdR ZOdSdT ZPdUdV ZQdS )W    )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                   C   s   t ttdkstd S )Nabs(x))r#   r   xAssertionError r'   r'   _/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/printing/tests/test_glsl.pytest_printmethod   s    r)   c                   C   s   t tt dddkstt tt t dddks4tt ttt  dddksPtt ttt  dddksltt ttttd    dddkstt t t ddd	d
kstt t t dddkst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%   yr&   zr'   r'   r'   r(   test_print_without_operators   s    $r0   c                   C   s@   t ttdkstt td dks(tt ttdks<td S )Nzsqrt(x)r+   )r#   r   r%   r&   r'   r'   r'   r(   test_glsl_code_sqrt   s    r1   c                  C   s   t dttdt } ttd dks(ttttd  dks@ttd| td ttt    td t  dksttttd	 d
kst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#   r&   r.   )r2   r'   r'   r(   test_glsl_code_Pow#   s    *r6   c                   C   s   t tttdkstt tttdks,tt tttdksBtt tttdksXtt tttdksntt t	ttdkstd S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)
r#   r   r%   r.   r&   r   r   r   r   r   r'   r'   r'   r(   test_glsl_code_Relational,   s    r7   c                   C   s(   t tddkstt tdks$td S )Nr5   zfloat E = 2.71828183;
Ezfloat pi = 3.14159265;
pi)r#   r   r&   r   r'   r'   r'   r(   test_glsl_code_constants_mathh5   s    r8   c                   C   s@   t dt dkstt dt dks(tt dt dks<td S )Nr3   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'   r'   r(   test_glsl_code_constants_other<   s    r9   c                   C   s\   t tdddkstt tdddks,tt tdddksBtt td	ddksXtd S )
Nr4      z3.0/7.0   	   2iz-3.0/7.0)r#   r   r&   r'   r'   r'   r(   test_glsl_code_RationalB   s    r?   c                   C   s,   t tddkstt tddks(td S )NC   Z67z-1)r#   r   r&   r'   r'   r'   r(   test_glsl_code_IntegerI   s    rB   c                   C   s    t tttt dkstd S )Nzpow(sin(x), cos(x)))r#   r   r%   r   r&   r'   r'   r'   r(   test_glsl_code_functionsN   s    rC   c                  C   s   t d} tdt| d|  }t|| dks0ttdt| d|  t }t|| dks\ttd}tdt dd	d
}tdt| | d|   d|   }t||| || ddkstd S )Nr%   r2   r3   z2*xz(float Catalan = 0.915965594;
2*x/CatalanAinTintegerr5   	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   )r%   r2   rD   rE   r'   r'   r(   test_glsl_code_inline_functionR   s     rK   c                   C   s,   t ttdkstt ttdks(td S )Nzceil(x)r$   )r#   r   r%   r&   r   r'   r'   r'   r(   test_glsl_code_exceptionsb   s    rL   c                   C   s   t tt@ dkstt ttB dks(tt t dks:tt tt@ t@ dksRtt ttB tB dksjtt tt@ tB dkstt ttB t@ dkstd S )Nzx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y)r-   r'   r'   r'   r(   test_glsl_code_booleang   s    rM   c                     s   t ttdk ftd df t } d}| |ks2tt dddksFtt ttdk ftd tdkftttdkf tt fd	d
 d S )Nr5   r3   Tz)((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
))crI   z5if (x < 1) {
   c = x;
}
else {
   c = pow(x, 2.0);
}r   c                      s   t  S Nr"   r'   exprr'   r(   <lambda>       z*test_glsl_code_Piecewise.<locals>.<lambda>)r   r%   r#   r&   r   r   
ValueErrorpsr'   rP   r(   test_glsl_code_Piecewiseq   s    	
,rX   c                  C   s6   t dtttdk ftd df } d}| |ks2td S )Nr3   r5   Tz+2*((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
)))r#   r   r%   r&   rU   r'   r'   r(   test_glsl_code_Piecewise_deep   s    "	rY   c                   C   s   t tdd  d S )Nc                   S   s   t ttddS )Ngarbage)method)r#   r   r%   r'   r'   r'   r(   rR      rS   z)test_glsl_code_settings.<locals>.<lambda>)r   	TypeErrorr'   r'   r'   r(   test_glsl_code_settings   s    r]   c            
      C   s   t ddd\} }}td| td|td|  }}}t }t |_td| }||dks`ttd	||f }||d
|| |  ksttd|||f }	||	d|| | ||  |  kst|jt kstd S )Nzn m oTrG   rE   jkr%   zx[j]rD   zA[%s]BzB[%s])r   r   r   setZ_not_cr   Z_print_Indexedr&   )
rF   morE   r^   r_   rV   r%   rD   r`   r'   r'   r(   test_glsl_code_Indexed   s    "*rd   c                  C   s   t ddddgdkstt dddgdddks2tt dddgt d	ksLtt dddgt tdddksnttd
dd} t | d | d gstd S )Nr5   r3   r4      zvec4(1, 2, 3, 4)F)
glsl_typeszfloat[3](1, 2, 3)r5   r3   r4   rD   r   )r#   r&   r!   r    )rb   r'   r'   r(   test_glsl_code_list_tuple_Tuple   s    "rh   c            	      C   sp   t ddd\} }td}td}td}td|}td| }d	}t|||f ||  || d
}||ksltd S )Nn mTrG   rD   r%   r.   rE   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++){
      y[i] = A[n*i + j]*x[j] + y[i];
   }
}rI   r   r   r   r#   r&   )	rF   rb   rD   r%   r.   rE   r^   rW   rN   r'   r'   r(   "test_glsl_code_loops_matrix_vector   s    

 rk   c                  C   sd   t ddtd\} }td}td}t| |} d| jj|jd }t||  ||  d}||ks`td S )	Nzi mT)rH   clsr%   r.   zlfor (int i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){
   y[i_%(icount)i] = x[i_%(icount)i];
})ZicountZmcountrI   )r   r
   r   r   labelZdummy_indexr#   r&   )rE   rb   r%   r.   expectedcoder'   r'   r(   test_dummy_loops   s    
rp   c            
      C   s   t ddd\} }td}td}td}td}td|}td	| }d
}t|||f ||  ||  ||  || d}	|	|kstd S )Nri   TrG   rD   r%   r.   r/   rE   r^   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];
   }
}rI   rj   )
rF   rb   rD   r%   r.   r/   rE   r^   rW   rN   r'   r'   r(   test_glsl_code_loops_add   s    


0rq   c                  C   s   t ddd\} }}}td}td}td}td|}td| }td	|}	td
|}
d||  | | || |  |	|  |
 || | |	|  |
 f d }t|||	|
f ||||	|
f  || d}||kstd S )Nn m o pTrG   abr.   rE   r^   r_   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[%s]*b[%s] + y[i];
         }
      }
   }
}rI   rj   )rF   rb   rc   rV   rs   rt   r.   rE   r^   r_   ru   rW   rN   r'   r'   r(   *test_glsl_code_loops_multiple_contractions   s     



>*rw   c                  C   s  t ddd\} }}}td}td}td}td}td|}td	| }	td
|}
td|}d||  | | |	| |  |
|  | ||  | | |	| |  |
|  | |	| | |
|  | f d }t|||	|
|f |||	|
|f  ||	|
|f  || d}||kstd S )Nrr   TrG   rs   rt   rN   r.   rE   r^   r_   ru   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[%s] + b[%s])*c[%s] + y[i];
rv   rI   rj   )rF   rb   rc   rV   rs   rt   rN   r.   rE   r^   r_   ru   rW   r'   r'   r(   test_glsl_code_loops_addfactor  s"    



d:rx   c                  C   s  t ddd\} }}}td}td}td}td}td|}td	| }	td
|}
d}d||  | |	|  |
  d }d|| |
  d }d||  |	  d }t||	 |||	f  ||
 |||
f   ||	 ||
  |||	|
f   || d}||| | |d d  ks||| | |d d  ks||| | |d d  ks||| | |d d  ks||| | |d d  ks||| | |d d  kstd S )Nrr   TrG   rs   rt   rN   r.   rE   r^   r_   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];
rI   rA   rj   )rF   rb   rc   rV   rs   rt   rN   r.   rE   r^   r_   s0s1s2Zs3r'   r'   r(   #test_glsl_code_loops_multiple_terms*  sV    





D r|   c                  C   s:  t tt tdt tdkftdfttg} tddd}t| |ddksLttt |d |d gshttd|d	  tdkf|d	 dft|d
  |d  }t|dksttddd}tddd}t t|d
 dt	|d	 g|d
 |d	  |d dgd|d  |d
  t
|d d dgg}t||dks6td S )Nr3   r   TrD   r4   r5   rI   z\A[0][0] = x*y;
if (y > 0) {
   A[1][0] = x + 2;
}
else {
   A[1][0] = y;
}
A[2][0] = sin(z);)r3   r   )r5   r   )r   r   zF((x > 0) ? (
   2*A[2][0]
)
: (
   A[2][0]
)) + sin(A[1][0]) + A[0][0]q   M)r4   r   )re   r   re   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%   r.   r   r   r/   r    r#   r&   r   r   )matrD   rQ   r}   r   rb   r'   r'   r(   test_Matrix_printingZ  s&    ,
	6	$r   c                  C   sB   t } tdddddddg}| |dks*t| | dks>td S )	Nr5   r3   r4   re   r~      r:   zfloat[7](1, 2, 3, 4, 5, 6, 7))r#   r   r&   	transposeglrD   r'   r'   r(   test_Matrices_1x7  s    r   c                  C   s2   t } tdddddddg}| |dd	d
ks.td S )Nr5   r3   r4   re   r~   r   r:   int)
array_typezint[7](1, 2, 3, 4, 5, 6, 7))r#   r   r&   r   r'   r'   r(    test_Matrices_1x7_array_type_int  s    r   c                  C   s&   t } td}| |ddddks"td S )Na b cZAbcTypeF)r   rf   zAbcType[3](a, b, c))r#   r   r&   r   r'   r'   r(   test_Tuple_array_type_custom  s    r   c                  C   s@   t } tdddddddg}td}| ||d	td
ks<td S )Nr5   r3   r4   re   r~   r   r:   zx.a x.b x.c x.d x.e x.f x.grI   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dedentr&   )r   rD   rJ   r'   r'   r(   *test_Matrices_1x7_spread_assign_to_symbols  s    r   c                  C   s6   t } d}tdtdf}| ||dtdks2td S )N)rg   rg   r   x y zrI   Y        a = 1;
        b = 2;
        c = 3;
        x = 1;
        y = 2;
        z = 3;r#   r   r   r   r&   r   rQ   rJ   r'   r'   r(   $test_spread_assign_to_nested_symbols  s    r   c            	      C   sR   t } td\}}}}}}d}||f|f||f|ff}| ||dtdksNtd S )Nza b c x y z)r5   r3   r4   r   rI   r   r   )	r   rs   rt   rN   r%   r.   r/   rQ   rJ   r'   r'   r(   +test_spread_assign_to_deeply_nested_symbols  s
    r   c               	   C   sb   t } t  tddgddgg}W 5 Q R X tdtdtdtdf}| ||td	ks^td S )
Nr   )r4   re   )r~   r   )r:      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&   r   r'   r'   r(   .test_matrix_of_tuples_spread_assign_to_symbols  s
    r   c                      s$   dt d tt fdd d S )Nr   r   c                      s
   t  S rO   r"   r'   rJ   rQ   r'   r(   rR     rS   z?test_cannot_assign_to_cause_mismatched_length.<locals>.<lambda>)r   r   rT   r'   r'   r   r(   -test_cannot_assign_to_cause_mismatched_length  s    r   c                  C   sR   t } tdddtddd tddd }tddd}| ||dtdksNtd S )NrD   re   r`   CXrI   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&   r   r'   r'   r(   test_matrix_4x4_assign  s    $r   c               	   C   s   t } tddD ]}tt|}| | | |ks6t| |dd| |ksNt|dkr|dkr| |d|ddd	 t|D f kstq| |d
|ddd	 t|D f kstqd S )Nr5   
   Tmat_transposere   z	vec%s(%s)z, c                 s   s   | ]}t |V  qd S rO   str.0rW   r'   r'   r(   	<genexpr>  s     z test_1xN_vecs.<locals>.<genexpr>zfloat[%s](%s)c                 s   s   | ]}t |V  qd S rO   r   r   r'   r'   r(   r     s     )r#   ranger   r   r&   join)r   rE   rD   r'   r'   r(   test_1xN_vecs  s    .r   c            	         s  d} t ddD ]h}t ddD ]V t fddt |D }t|}t|dd}| dt | d	 7 } | d
| d 7 } | d| d 7 } | d7 } | d7 } |dkr dkr|dkstq|dkr dkr|dkr dkr|d  st|d| svtq|dkr. dkr.|dsvtq dkrT|dkrT|dsvtq|dkr|d  | svt|d  | svtq dkr|d|   st|d|   svtq|d|   st|d|   stt|dd}t|ddd}|d| f s.t|d |f sFt| d| d 7 } | d| d 7 } | d7 } | d7 } qqd}|rtdd}||  |	  d S )Nzdef test_misc_mats():
r5   r   c                    s$   g | ]  fd dt D qS )c                    s   g | ]}|   qS r'   r'   )r   r%   )r^   r.   r'   r(   
<listcomp>  s     z,test_MxN_mats.<locals>.<listcomp>.<listcomp>)r   )r   r^   )r.   r(   r     s     z!test_MxN_mats.<locals>.<listcomp>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
0re   zmat%sZvecz
float[%s](
mat_nested)r   r   zfloat[%s][%s]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   Z_printr&   
startswithopenwriteclose)	ZgeneratedAssertionsrE   rD   r   glTransposedglNestedglNestedTransposedZgenerateAssertionsgenr'   r   r(   test_MxN_mats  sR    (



r   c               
   C   s>	  t dgg} d}d}t| |ks$tt| dd|ks8tt ddgg} d}d}t| |ks^tt| dd|ksrtt dddgg} d}d}t| |kstt| dd|kstt dddd	gg} d
}d
}t| |kstt| dd|kstt dddd	dgg} d}d}t| |kstt| dd|ks0tt dgdgg} d}d}t| |ksZtt| dd|ksptt ddgdd	gg} d}d}t| |kstt| dd|kstt dddgd	ddgg} d}d}t| |kstt| dd|kstt dddd	gddddgg} d}d}t| |ks2tt| dd|ksHtt dddd	dgdddddgg} d}d}t| |kstt| dd|kstd}d}t| dd|kstt| ddd|kstt dgdgdgg} d}d}t| |kstt| dd|kstt ddgdd	gddgg} d}d}t| |ksFtt| dd|ks\tt dddgd	ddgdddgg} d }d!}t| |kstt| dd|kstt dddd	gddddgddd"d#gg} d$}d%}t| |kstt| dd|kstt dddd	dgdddddgd"d#d&d'd(gg} d)}d*}t| |ksHtt| dd|ks^td+}d,}t| dd|ks|tt| ddd|kstt dgdgdgd	gg} d
}d
}t| |kstt| dd|kstt ddgdd	gddgddgg} d-}d.}t| |kstt| dd|ks,tt dddgd	ddgdddgdd"d#gg} d/}d0}t| |ksntt| dd|kstt dddd	gddddgddd"d#gd&d'd(d1gg} d2}d3}t| |kstt| dd|kstt dddd	dgdddddgd"d#d&d'd(gd1d4d5d6d7gg} d8}d9}t| |ks6tt| dd|ksLtd:}d;}t| dd|ksjtt| ddd|kstt dgdgdgd	gdgg} d}d}t| |kstt| dd|kstt ddgdd	gddgddgddgg} d<}d=}t| |kstt| dd|ks$td>}d?}t| dd|ksBtt| ddd|ksZtt dddgd	ddgdddgdd"d#gd&d'd(gg} d@}dA}t| |kstt| dd|kstdB}dC}t| dd|kstt| ddd|kstt dddd	gddddgddd"d#gd&d'd(d1gd4d5d6d7gg} dD}dE}t| |ksDtt| dd|ksZtdF}dG}t| dd|ksxtt| ddd|kstt dddd	dgdddddgd"d#d&d'd(gd1d4d5d6d7gdHdIdJdKdLgg} dM}dN}t| |kstt| dd|k	stdO}dP}t| dd|k	s"tt| ddd|k	s:td S )QNr   r   Tr   r5   z
vec2(0, 1)r3   zvec3(0, 1, 2)r4   zvec4(0, 1, 2, 3)re   zfloat[5](0, 1, 2, 3, 4)zmat2(0, 1, 2, 3)zmat2(0, 2, 1, 3)r~   zmat3x2(0, 1, 2, 3, 4, 5)zmat2x3(0, 3, 1, 4, 2, 5)r   r:   zmat4x2(0, 1, 2, 3, 4, 5, 6, 7)zmat2x4(0, 4, 1, 5, 2, 6, 3, 7)r   r<   zBfloat[10](
   0, 1, 2, 3, 4,
   5, 6, 7, 8, 9
) /* a 2x5 matrix */zKfloat[10](
   0, 5,
   1, 6,
   2, 7,
   3, 8,
   4, 9
) /* a 5x2 matrix */zCfloat[2][5](
   float[](0, 1, 2, 3, 4),
   float[](5, 6, 7, 8, 9)
)zgfloat[5][2](
   float[](0, 5),
   float[](1, 6),
   float[](2, 7),
   float[](3, 8),
   float[](4, 9)
)r   )r   r   zmat2x3(0, 1, 2, 3, 4, 5)zmat3x2(0, 2, 4, 1, 3, 5)zmat3(0, 1, 2, 3, 4, 5, 6, 7, 8)zmat3(0, 3, 6, 1, 4, 7, 2, 5, 8)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)         zafloat[15](
   0,  1,  2,  3,  4,
   5,  6,  7,  8,  9,
   10, 11, 12, 13, 14
) /* a 3x5 matrix */z_float[15](
   0, 5, 10,
   1, 6, 11,
   2, 7, 12,
   3, 8, 13,
   4, 9, 14
) /* a 5x3 matrix */zmfloat[3][5](
   float[]( 0,  1,  2,  3,  4),
   float[]( 5,  6,  7,  8,  9),
   float[](10, 11, 12, 13, 14)
)z{float[5][3](
   float[](0, 5, 10),
   float[](1, 6, 11),
   float[](2, 7, 12),
   float[](3, 8, 13),
   float[](4, 9, 14)
)zmat2x4(0, 1, 2, 3, 4, 5, 6, 7)zmat4x2(0, 2, 4, 6, 1, 3, 5, 7)z2mat3x4(0,  1,  2, 3,  4,  5, 6,  7,  8, 9, 10, 11)z-mat4x3(0, 3, 6,  9, 1, 4, 7, 10, 2, 5, 8, 11)   zDmat4( 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15)z<mat4(0, 4,  8, 12, 1, 5,  9, 13, 2, 6, 10, 14, 3, 7, 11, 15)      r;      zxfloat[20](
   0,  1,  2,  3,  4,
   5,  6,  7,  8,  9,
   10, 11, 12, 13, 14,
   15, 16, 17, 18, 19
) /* a 4x5 matrix */zsfloat[20](
   0, 5, 10, 15,
   1, 6, 11, 16,
   2, 7, 12, 17,
   3, 8, 13, 18,
   4, 9, 14, 19
) /* a 5x4 matrix */zfloat[4][5](
   float[]( 0,  1,  2,  3,  4),
   float[]( 5,  6,  7,  8,  9),
   float[](10, 11, 12, 13, 14),
   float[](15, 16, 17, 18, 19)
)zfloat[5][4](
   float[](0, 5, 10, 15),
   float[](1, 6, 11, 16),
   float[](2, 7, 12, 17),
   float[](3, 8, 13, 18),
   float[](4, 9, 14, 19)
)zKfloat[10](
   0, 1,
   2, 3,
   4, 5,
   6, 7,
   8, 9
) /* a 5x2 matrix */zBfloat[10](
   0, 2, 4, 6, 8,
   1, 3, 5, 7, 9
) /* a 2x5 matrix */zgfloat[5][2](
   float[](0, 1),
   float[](2, 3),
   float[](4, 5),
   float[](6, 7),
   float[](8, 9)
)zCfloat[2][5](
   float[](0, 2, 4, 6, 8),
   float[](1, 3, 5, 7, 9)
)zefloat[15](
   0,  1,  2,
   3,  4,  5,
   6,  7,  8,
   9, 10, 11,
   12, 13, 14
) /* a 5x3 matrix */zZfloat[15](
   0, 3, 6,  9, 12,
   1, 4, 7, 10, 13,
   2, 5, 8, 11, 14
) /* a 3x5 matrix */zfloat[5][3](
   float[]( 0,  1,  2),
   float[]( 3,  4,  5),
   float[]( 6,  7,  8),
   float[]( 9, 10, 11),
   float[](12, 13, 14)
)zdfloat[3][5](
   float[](0, 3, 6,  9, 12),
   float[](1, 4, 7, 10, 13),
   float[](2, 5, 8, 11, 14)
)zzfloat[20](
   0,  1,  2,  3,
   4,  5,  6,  7,
   8,  9, 10, 11,
   12, 13, 14, 15,
   16, 17, 18, 19
) /* a 5x4 matrix */zrfloat[20](
   0, 4,  8, 12, 16,
   1, 5,  9, 13, 17,
   2, 6, 10, 14, 18,
   3, 7, 11, 15, 19
) /* a 4x5 matrix */zfloat[5][4](
   float[]( 0,  1,  2,  3),
   float[]( 4,  5,  6,  7),
   float[]( 8,  9, 10, 11),
   float[](12, 13, 14, 15),
   float[](16, 17, 18, 19)
)zfloat[4][5](
   float[](0, 4,  8, 12, 16),
   float[](1, 5,  9, 13, 17),
   float[](2, 6, 10, 14, 18),
   float[](3, 7, 11, 15, 19)
)               zfloat[25](
   0,  1,  2,  3,  4,
   5,  6,  7,  8,  9,
   10, 11, 12, 13, 14,
   15, 16, 17, 18, 19,
   20, 21, 22, 23, 24
) /* a 5x5 matrix */zfloat[25](
   0, 5, 10, 15, 20,
   1, 6, 11, 16, 21,
   2, 7, 12, 17, 22,
   3, 8, 13, 18, 23,
   4, 9, 14, 19, 24
) /* a 5x5 matrix */zfloat[5][5](
   float[]( 0,  1,  2,  3,  4),
   float[]( 5,  6,  7,  8,  9),
   float[](10, 11, 12, 13, 14),
   float[](15, 16, 17, 18, 19),
   float[](20, 21, 22, 23, 24)
)zfloat[5][5](
   float[](0, 5, 10, 15, 20),
   float[](1, 6, 11, 16, 21),
   float[](2, 7, 12, 17, 22),
   float[](3, 8, 13, 18, 23),
   float[](4, 9, 14, 19, 24)
))r   r#   r&   )r   r   r   r   r   r'   r'   r(   test_misc_mats%  s   













r   )RZ
sympy.corer   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Zsympy.functionsr   r   r   r   r   r   r   Zsympy.testing.pytestr   r   Zsympy.printing.glslr   Zsympy.printing.strr   Zsympy.utilities.lambdifyr   Zsympy.tensorr   r   Zsympy.matricesr   r    r!   r#   r   r%   r.   r/   r)   r0   r1   r6   r7   r8   r9   r?   rB   rC   rK   rL   rM   rX   rY   r]   rd   rh   rk   rp   rq   rw   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   s`   D$			
	0+/