o
    8Vasp                     @   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 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-d. Z>d/d0 Z?d1d2 Z@d3d4 ZAd5d6 ZBd7d8 ZCd9d: ZDd;d< ZEd=d> ZFd?d@ ZGdAdB ZHdCdD ZIdEdF ZJdGdH ZKdIdJ ZLdKdL ZMdMdN ZNdOdP ZOdQdR ZPdSdT ZQdUdV ZRd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
J d S )Nabs(x))r$   r   x r'   r'   @/usr/lib/python3/dist-packages/sympy/printing/tests/test_glsl.pytest_printmethod   s   r)   c                   C   s   t tt dddksJ t tt t dddksJ t ttt  dddks(J t ttt  dddks6J t ttttd    dddksHJ t t t ddd	d
ksVJ t t t dddkscJ 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*   Zzerozsub(zero(), add(x, y))zsub(0.0, add(x, y))r$   r&   yzr'   r'   r'   r(   test_print_without_operators   s   $r/   c                   C   s@   t ttdks
J t td dksJ t ttdksJ d S )Nzsqrt(x)r+   )r$   r   r&   r'   r'   r'   r(   test_glsl_code_sqrt      r0   c                  C   s   t dttdt } ttd dksJ tttd  dks J td| td ttt    td t  dks:J ttd	 d
ksDJ 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-   )r2   r'   r'   r(   test_glsl_code_Pow#   s   *r6   c                   C   s   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s7J t tttdksBJ 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(   test_glsl_code_Relational,   s   r7   c                   C   s(   t tddks
J t tdksJ d S )Nr5   zfloat E = 2.71828183;
Ezfloat pi = 3.14159265;
pi)r$   r   r   r'   r'   r'   r(   test_glsl_code_constants_mathh5   s   r8   c                   C   s@   t dt dks
J t dt dksJ t dt dksJ 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(   test_glsl_code_constants_other<   r1   r9   c                   C   s\   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 )
Nr4      z3.0/7.0   	   2iz-3.0/7.0)r$   r   r'   r'   r'   r(   test_glsl_code_RationalB   s   r?   c                   C   s,   t tddks
J t tddksJ d S )NC   Z67z-1)r$   r   r'   r'   r'   r(   test_glsl_code_IntegerI      rB   c                   C   s    t tttt dksJ d S )Nzpow(sin(x), cos(x)))r$   r   r&   r   r'   r'   r'   r(   test_glsl_code_functionsN   s    rD   c                  C   s   t d} tdt| d|  }t|| dksJ tdt| d|  t }t|| dks.J td}tdt dd	d
}tdt| | d|   d|   }t||| || ddks[J 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&   r2   rE   rF   r'   r'   r(   test_glsl_code_inline_functionR   s    rL   c                   C   s,   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'   r(   test_glsl_code_exceptionsb   rC   rM   c                   C   s   t tt@ dks
J t ttB dksJ t t dksJ t tt@ t@ dks)J t ttB tB dks5J t tt@ tB dksAJ t ttB t@ dksMJ 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   rN   c                     s   t ttdk ftd df t } d}| |ksJ t dddks#J 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)
))crJ   z5if (x < 1) {
   c = x;
}
else {
   c = pow(x, 2.0);
}r   c                      s   t  S Nr#   r'   exprr'   r(   <lambda>   s    z*test_glsl_code_Piecewise.<locals>.<lambda>)r   r&   r$   r   r   
ValueErrorpsr'   rQ   r(   test_glsl_code_Piecewiseq   s   	
,rX   c                  C   s6   t dtttdk ftd df } d}| |ksJ d S )Nr3   r5   Tz+2*((x < 1) ? (
   x
)
: (
   pow(x, 2.0)
)))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 )NZgarbage)method)r$   r   r&   r'   r'   r'   r(   rS      s    z)test_glsl_code_settings.<locals>.<lambda>)r   	TypeErrorr'   r'   r'   r(   test_glsl_code_settings   s   r\   c                  C   s   ddl m} m} ddlm} |ddd\}}}|d||d||d	|}}}t }	t |	_| d
| }
|	|
dks>J | d||f }|	|d|| |  ksUJ | d|||f }|	|d|| | ||  |  kssJ |	jt ks{J d S )Nr   r   r   zn m oTrH   rF   jkr&   zx[j]rE   zA[%s]BzB[%s])	sympy.tensorr   r   sympyr   r   setZ_not_cZ_print_Indexed)r   r   r   rG   morF   r^   r_   rV   r&   rE   r`   r'   r'   r(   test_glsl_code_Indexed   s   "*rf   c                  C   s   t g ddks
J t g ddddksJ t g dt dks"J t g dt tddd	ks2J td
d	d} t | d | d gsDJ d S )N)r5   r3   r4      zvec4(1, 2, 3, 4)r5   r3   r4   F)
glsl_typeszfloat[3](1, 2, 3)r5   r3   r4   rE   rg   r   )r$   r"   r!   )rd   r'   r'   r(   test_glsl_code_list_tuple_Tuple   s    rj   c            	      C   sp   t ddd\} }td}td}td}td|}td| }d	}t|||f ||  || d
}||ks6J d S )Nn mTrH   rE   r&   r-   rF   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];
   }
}rJ   )r   r   r   r$   )	rG   rd   rE   r&   r-   rF   r^   rW   rO   r'   r'   r(   "test_glsl_code_loops_matrix_vector   s   

 rl   c                  C   sd   t ddtd\} }td}td}t| |} d| jj|jd }t||  ||  d}||ks0J d S )	Nzi mT)rI   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mcountrJ   )r   r
   r   r   ZlabelZdummy_indexr$   )rF   rd   r&   r-   Zexpectedcoder'   r'   r(   test_dummy_loops   s   
ro   c                  C   s   ddl m} m} ddlm} |ddd\}}| d}| d}| d	}| d
}|d|}	|d|}
d}t||	|
f ||
  ||	  ||	  ||	 d}||ksPJ d S )Nr   r   r]   rk   TrH   rE   r&   r-   r.   rF   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];
   }
}rJ   ra   r   r   rb   r   r$   )r   r   r   rG   rd   rE   r&   r-   r.   rF   r^   rW   rO   r'   r'   r(   test_glsl_code_loops_add   s   

0
rq   c                  C   s   ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	|d
|}
|d|}|d|}|d|}d|
| | | || |  ||  | || | ||  | f d }t||||f ||
|||f  |	|
 d}||kswJ d S )Nr   r   r]   n m o pTrH   abr-   rF   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];
         }
      }
   }
}rJ   rp   )r   r   r   rG   rd   re   rV   rs   rt   r-   rF   r^   r_   ru   rW   rO   r'   r'   r(   *test_glsl_code_loops_multiple_contractions   s$   



>*rw   c                  C   s0  ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	| d
}
|d|}|d|}|d|}|d|}d|| | | || |  ||  | || | | || |  ||  | || | ||  | f d }t|||||f |||||f  |	|||f  |
| d}	|	|ksJ d S )Nr   r   r]   rr   TrH   rs   rt   rO   r-   rF   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   rJ   rp   )r   r   r   rG   rd   re   rV   rs   rt   rO   r-   rF   r^   r_   ru   rW   r'   r'   r(   test_glsl_code_loops_addfactor  s&   



d:rx   c                  C   s  ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	| d
}
|d|}|d|}|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sJ d S d S d S d S d S d S )Nr   r   r]   rr   TrH   rs   rt   rO   r-   rF   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];
rJ   rA   rp   )r   r   r   rG   rd   re   rV   rs   rt   rO   r-   rF   r^   r_   Zs0s1s2Zs3r'   r'   r(   #test_glsl_code_loops_multiple_terms2  sX   





Jr{   c                  C   s8  t tt tdt tdkftdfttg} tddd}t| |ddks&J tt |d |d gs4J td|d	  tdkf|d	 dft|d
  |d  }t|dksWJ 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sJ d S )Nr3   r   TrE   r4   r5   rJ   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   )rg   r   rg   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   )matrE   rR   r|   r~   rd   r'   r'   r(   test_Matrix_printingd  s&   ,
	6	$r   c                  C   s8   t } tg d}| |dksJ | | dksJ d S )Nr5   r3   r4   rg   r}      r:   zfloat[7](1, 2, 3, 4, 5, 6, 7))r$   r    	transposeglrE   r'   r'   r(   test_Matrices_1x7  s   r   c                  C   s(   t } tg d}| |dddksJ d S )Nr   int)
array_typezint[7](1, 2, 3, 4, 5, 6, 7))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J d S )Na b cZAbcTypeF)r   ri   zAbcType[3](a, b, c))r$   r   r   r'   r'   r(   test_Tuple_array_type_custom  s   r   c                  C   s6   t } tg d}td}| ||dtdksJ d S )Nr   zx.a x.b x.c x.d x.e x.f x.grJ   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   rE   rK   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sJ d S )N)rh   rh   r   x y zrJ   Y        a = 1;
        b = 2;
        c = 3;
        x = 1;
        y = 2;
        z = 3;r$   r   r   r   r   rR   rK   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s'J d S )Nza b c x y z)r5   r3   r4   r   rJ   r   r   )	r   rs   rt   rO   r&   r-   r.   rR   rK   r'   r'   r(   +test_spread_assign_to_deeply_nested_symbols  s
   r   c                  C   sv   t } t  tddgddgg}W d    n1 sw   Y  tdtdtdtdf}| ||td	ks9J d S )
Nr   )r4   rg   )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(   .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 rP   r#   r'   rK   rR   r'   r(   rS     s   
 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s'J d S )NrE   rg   r`   CXrJ   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(   test_matrix_4x4_assign  s   $r   c               	   C   s   t } tddD ]U}tt|}| | | |ksJ | |dd| |ks'J |dkr\|dkrF| |d|ddd	 t|D f ksEJ q| |d
|ddd	 t|D f ks\J qd S )Nr5   
   Tmat_transposerg   z	vec%s(%s)z, c                 s       | ]}t |V  qd S rP   str.0rW   r'   r'   r(   	<genexpr>      z test_1xN_vecs.<locals>.<genexpr>zfloat[%s](%s)c                 s   r   rP   r   r   r'   r'   r(   r     r   )r$   ranger    r   join)r   rF   rE   r'   r'   r(   test_1xN_vecs  s   .,r   c            	         s  d} t ddD ]!}t ddD ] 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s[J q|dkr dkr|dkr dkr|d  suJ |d| s~J q|dkr dkr|dsJ q dkr|dkr|dsJ q|dkr|d  | sJ |d  | sJ q dkr|d|   sJ |d|   sJ q|d|   sJ |d|   sJ t|dd}t|ddd}|d| f sJ |d |f sJ | d| d 7 } | d| d 7 } | d7 } | d7 } qqd}|r?tdd}||  |  d S 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
0rg   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_print
startswithopenwriteclose)	ZgeneratedAssertionsrF   rE   r   glTransposedglNestedglNestedTransposedZgenerateAssertionsgenr'   r   r(   test_MxN_mats   sV    
#

r   c                  C   sz  t dgg} d}d}t| |ksJ t| dd|ksJ t ddgg} d}d}t| |ks/J t| dd|ks9J t g dg} d}d}t| |ksLJ t| dd|ksVJ t g d	g} d
}d
}t| |ksiJ t| dd|kssJ t g dg} d}d}t| |ksJ t| dd|ksJ t dgdgg} d}d}t| |ksJ t| dd|ksJ t ddgddgg} d}d}t| |ksJ t| dd|ksJ t g dg dg} d}d}t| |ksJ t| dd|ksJ t g d	g dg} d}d}t| |ksJ t| dd|ksJ t g dg dg} d}d}t| |ks'J t| dd|ks2J d}d}t| dd|ksAJ t| ddd|ksMJ t dgdgdgg} d}d}t| |ksdJ t| dd|ksoJ t ddgddgddgg} d }d!}t| |ksJ t| dd|ksJ t g dg dg d"g} d#}d$}t| |ksJ t| dd|ksJ t g d	g dg d%g} d&}d'}t| |ksJ t| dd|ksJ t g dg dg d(g} d)}d*}t| |ksJ t| dd|ksJ d+}d,}t| dd|ksJ t| ddd|ksJ t dgdgdgdgg} d
}d
}t| |ks7J t| dd|ksBJ t ddgddgddgd-d.gg} d/}d0}t| |ks_J t| dd|ksjJ t g dg dg d"g d1g} d2}d3}t| |ksJ t| dd|ksJ t g d	g dg d%g d4g} d5}d6}t| |ksJ t| dd|ksJ t g dg dg d(g d7g} d8}d9}t| |ksJ t| dd|ksJ d:}d;}t| dd|ksJ t| ddd|ksJ t dgdgdgdgdgg} d}d}t| |ksJ t| d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sCJ t| dd|ksNJ d@}dA}t| dd|ks]J t| ddd|ksiJ t g dg dg d"g d1g dBg} dC}dD}t| |ksJ t| dd|ksJ dE}dF}t| dd|ksJ t| ddd|ksJ t g d	g dg d%g d4g dGg} dH}dI}t| |ksJ t| dd|ksJ dJ}dK}t| dd|ksJ t| ddd|ksJ t g dg dg d(g d7g dLg} dM}dN}t| |ksJ t| dd|ks J dO}dP}t| dd|ks/J t| ddd|ks;J d S )QNr   r   Tr   r5   z
vec2(0, 1))r   r5   r3   zvec3(0, 1, 2))r   r5   r3   r4   zvec4(0, 1, 2, 3))r   r5   r3   r4   rg   zfloat[5](0, 1, 2, 3, 4)r3   r4   zmat2(0, 1, 2, 3)zmat2(0, 2, 1, 3))r4   rg   r}   zmat3x2(0, 1, 2, 3, 4, 5)zmat2x3(0, 3, 1, 4, 2, 5))rg   r}   r   r:   zmat4x2(0, 1, 2, 3, 4, 5, 6, 7)zmat2x4(0, 4, 1, 5, 2, 6, 3, 7))r}   r   r:   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   rg   r}   zmat2x3(0, 1, 2, 3, 4, 5)zmat3x2(0, 2, 4, 1, 3, 5))r   r:   r   zmat3(0, 1, 2, 3, 4, 5, 6, 7, 8)zmat3(0, 3, 6, 1, 4, 7, 2, 5, 8))r   r<   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   r:   zmat2x4(0, 1, 2, 3, 4, 5, 6, 7)zmat4x2(0, 2, 4, 6, 1, 3, 5, 7))r<   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         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)
)r   r<   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   r;   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   r'   r'   r(   test_misc_mats/  s  r   )SZ
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   ra   r   r   Zsympy.matricesr    r!   r"   rb   r$   r   r&   r-   r.   r)   r/   r0   r6   r7   r8   r9   r?   rB   rD   rL   rM   rN   rX   rY   r\   rf   rj   rl   ro   rq   rw   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   sb   D $			
	2+/