§
    OŠtj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© ó    ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/tests/test_glsl.pyÚtest_printmethodr+      s'   € Ý•S�‘V”VÑÔ Ò(Ð(Ð(Ð(Ð(Ð(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  € Ý•Q•q‘S¨Ð/Ñ/Ô/°;Ò>Ð>Ð>Ð>Ý•Q�‘T�!‘V¨EÐ2Ñ2Ô2Ð6IÒIÐIÐIÐIÝ•Q��!™‘W¨UÐ3Ñ3Ô3Ð7JÒJÐJÐJÐJÝ•Q��!™‘W¨UÐ3Ñ3Ô3Ð7JÒJÐJÐJÐJÝ•Q��!�Q ™V™)™‘_°UÐ;Ñ;Ô;Ð?`Ò`Ð`Ð`Ð`Ý•a�R�‘T¨°XÐ>Ñ>Ô>ÐBZÒZÐZÐZÐZÝ•a�R�‘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�!‘W”WÑÔ Ò*Ð*Ð*Ð*Ý•Q˜‘VÑÔ 	Ò)Ð)Ð)Ð)Ý•T�!‘W”WÑÔ Ò*Ð*Ð*Ð*Ð*Ð*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¥&­¨A­a©C¡.¤.Ñ1Ô1€AÝ•Q˜‘T‰?Œ?˜mÒ+Ð+Ð+Ð+Ý•Q�˜A™‘YÑÔÐ#8Ò8Ð8Ð8Ð8Ý�Q˜˜�!™œ˜S™¥A­­1©¡HÑ-Ñ-­q°!©tµa©xÑ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��1‘X”XÑÔ (Ò*Ð*Ð*Ð*Ý•R��1‘X”XÑÔ (Ò*Ð*Ð*Ð*Ý•R��1‘X”XÑÔ (Ò*Ð*Ð*Ð*Ý•R��1‘X”XÑÔ 'Ò)Ð)Ð)Ð)Ý•R��1‘X”XÑÔ 'Ò)Ð)Ð)Ð)Ý•R��1‘X”XÑÔ (Ò*Ð*Ð*Ð*Ð*Ð*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˜‘V”VÑÔÐ :Ò:Ð:Ð:Ð:Ý•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Ý�Q•w‘YÑÔÐ#LÒLÐLÐLÐLÝ�Q•z‘\Ñ"Ô"Ð&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é   é	   Ú2iùÿÿÿz-3.0/7.0éýÿÿÿ)r$   r   r(   r)   r*   Útest_glsl_code_RationalrH   B   sŽ   € Ý•X˜a ‘^”^Ñ$Ô$¨	Ò1Ð1Ð1Ð1Ý•X˜b !‘_”_Ñ%Ô%¨Ò,Ð,Ð,Ð,Ý•X˜a ‘_”_Ñ%Ô%¨Ò3Ð3Ð3Ð3Ý•X˜b "Ñ%Ô%Ñ&Ô&¨)Ò3Ð3Ð3Ð3Ð3Ð3r)   c                  óŽ   — t          t          d¦  «        ¦  «        dk    sJ ‚t          t          d¦  «        ¦  «        dk    sJ ‚d S )NéC   Ú67éÿÿÿÿz-1)r$   r   r(   r)   r*   Útest_glsl_code_IntegerrM   I   sF   € Ý•W˜R‘[”[Ñ!Ô! TÒ)Ð)Ð)Ð)Ý•W˜R‘[”[Ñ!Ô! 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�‘V”V�s¥1™vœvÑ%Ñ&Ô&Ð*?Ò?Ð?Ð?Ð?Ð?Ð?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¥&¨¨A¨a©C¡.¤.Ñ1Ô1€AÝ�Q�Q�q‘T”T‰?Œ?˜eÒ#Ð#Ð#Ð#Ý˜S¥&¨¨A¨a©Cµ©KÑ"8Ô"8Ñ9Ô9€AÝ�Q�Q�q‘T”T‰?Œ?ÐIÒIÐIÐIÐIÝ�CÑÔ€AÝˆC•˜ dÐ+Ñ+Ô+Ñ,Ô,€AÝ˜S¥&¨¨A¨q°1©u©I°q¸1±uÑ,=Ñ">Ô">Ñ?Ô?€AÝ�Q�Q�q˜”t‘W”W¨¨!¬Ð-Ñ-Ô-ð	òð ð ð ð ð 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   € Ý•W�Q‘Z”ZÑ Ô  IÒ-Ð-Ð-Ð-Ý•S�‘V”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 ‚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Ò'Ð'Ð'Ð'Ý•a�R‰=Œ=˜DÒ Ð Ð Ð Ý•Q�‘U�Q‘YÑÔ =Ò0Ð0Ð0Ð0Ý•Q�‘U�Q‘YÑÔ =Ò0Ð0Ð0Ð0Ý•a�!‘e�q‘[Ñ!Ô! ]Ò2Ð2Ð2Ð2Ý•a�!‘e�q‘[Ñ!Ô! _Ò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ðð ð �Š6ˆ6ˆ6ˆ6Ý�T SÐ)Ñ)Ô)ðò	ð 	ð 	ð 	õ •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   € Ý�!•I�q¥! a¢%˜j­1¨a©4°¨,Ñ7Ô7Ñ7Ñ8Ô8€Aðð ð �Š6ˆ6ˆ6ˆ6ˆ6ˆ6r)   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  € Ý�g tÐ,Ñ,Ô,�G€A€qˆ!Ý�#�q‰kŒk�3˜s A™;œ;­¨C°©¬ˆ!€q€AÝ‰Œ€AÝ‰uŒu€A„Hå�CÑÔ˜Ô€AØ×Ò˜AÑÔ &Ò(Ð(Ð(Ð(Ý�CÑÔ˜˜A˜Ô€AØ×Ò˜AÑÔ '¨Q¨q©S°©UÑ"3Ò3Ð3Ð3Ð3Ý�CÑÔ˜˜A˜q˜Ô!€AØ×Ò˜AÑÔ '¨Q¨q©S°©U°1°Q±3©Y°q©[Ñ"9Ò9Ð9Ð9Ð9àŒ8•s‘u”uÒÐÐÐÐÐ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Î   € Ý�Y�Y�YÑÔÐ#5Ò5Ð5Ð5Ð5Ý�W�W�W¨Ð.Ñ.Ô.Ð2EÒEÐEÐEÐEÝ�W�W�WÑÔ¥¨7Ñ!3Ô!3Ò3Ð3Ð3Ð3Ý�W�W�WÑÔ¥­5°°1°Q©<¬<Ñ!8Ô!8Ò8Ð8Ð8Ð8å�S˜˜1ÑÔ€AÝ�a˜”d˜1˜Qœ4�[Ñ!Ô!Ð!Ð!Ð!Ð!Ð!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   zŠfor (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 $Ð'Ñ'Ô'�D€A€qÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€Að	ð õ 	�!�A�q�D”'˜!˜Aœ$‘,¨!¨A¬$Ð/Ñ/Ô/€AØ�Š6ˆ6ˆ6ˆ6ˆ6ˆ6r)   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Ô2�D€A€qÝ�CÑÔ€AÝ�CÑÔ€AÝˆAˆq‰	Œ	€Að	ð ”7Ô&°!´-Ð@Ð@ñ	A€Hõ
 �Q�q”T Q q¤TÐ*Ñ*Ô*€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   z’for (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 $Ð'Ñ'Ô'�D€A€qÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€Að	ð õ 	�!�A�q�D”'˜!˜Aœ$‘,  1¤Ñ%¨¨!¬Ñ,¸¸!¼Ð=Ñ=Ô=€AØ�Š6ˆ6ˆ6ˆ6ˆ6ˆ6r)   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   Úlzµfor (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Ô1�J€A€qˆ!ˆQÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€A€Að 78¸±c¸!±e¸A±gÀÀ!ÁÀAÁ±oÈÈ!ÉÑ6KÈaÑ6OÐ6OÐ6OÐQRÐSTÑQTÐUVÑQVÐYZÐ[\ÑY\ÑQ\Ð_`ÑQ`ÐQ`ÐQ`ð	bð	ñ	ð õ 	�!�A�q˜!�G”*˜Q˜q ! Q¨˜zœ]Ñ*°a¸´dÐ;Ñ;Ô;€AØ�Š6ˆ6ˆ6ˆ6ˆ6ˆ6r)   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‘   z¶for (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Ô1�J€A€qˆ!ˆQÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€A€Að ABÀ!ÁÀAÁÀaÁÈ!ÈAÉ#ÈaÉ%ÁÐRSÐTUÑRUÑ@UÐXYÑ@YÐ@YÐ@YÐ[\Ð]^Ñ[^Ð_`Ñ[`ÐabÑ[bÐefÐghÑehÐijÑejÑ[jÐmnÐopÑmpÑ[pÐstÑ[tÐ[tÐ[tÐvwÐxyÑvyÐz{Ñv{Ð~ð  ABñ  Bñ  wBð  EFñ  wFð  wFð  wFð	Gð	ñ	ð õ 	�1�Q˜˜1˜a�Z”= 1 Q¨¨1¨a Z¤=Ñ0°!°A°q¸!°G´*Ñ<ÈÈ!ÌÐMÑMÔM€AØ�Š6ˆ6ˆ6ˆ6ˆ6ˆ6r)   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Ô1�J€A€qˆ!ˆQÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€Að	ð ð	4ð 89¸±s¸1±u¸qÀ¹s±{ÀQ±ñ	Hð	ñ		ð ð	,à/0°©s°Q©wñ	8ð	ñ	ð ð	,à/0°©s°Q©wñ	8ð	ñ	ð õ 	Ø	ˆ!ŒˆQˆq�!ˆtŒW‰�q˜”t˜A˜a ˜dœG‘|Ñ# a¨¤d¨1¨Q¬4¡i°°!°Q¸°'´
Ñ&:Ñ:ÀaÈÄdð	Lñ 	Lô 	L€Aà��b‘˜2‘  3 B 3¤Ñ'Ò'Ð'Ø��b‘˜2‘  3 B 3¤Ñ'Ò'Ð'Ø��b‘˜2‘  3 B 3¤Ñ'Ò'Ð'Ø��b‘˜2‘  3 B 3¤Ñ'Ò'Ð'Ø��b‘˜2‘  3 B 3¤Ñ'Ò'Ð'Ø��b‘˜2‘  3 B 3¤Ñ'Ò'Ð'Ð'ð(Ð'Ð'Ø'Ð'Ø'Ð'Ø'Ð'Ø'Ð'Ø'Ð'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   z¨M[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ª µ°4¨yÑ9Ô9½3½q¹6¼6ÐBÑ
CÔ
C€CÝ�S˜!˜QÑÔ€AÝ�S AÐ&Ñ&Ô&ðòð ð ð õ •V˜Q˜qœT ! A¤$˜KÑ(Ô(Ñ)Ô)Ð)Ð)Ð)å�a˜˜$œ‘i¥ Q¢Ð'¨!¨D¬'°4¨Ñ9Ô9½CÀÀ$Ä¹L¼LÑHÈ1ÈTÌ7ÑR€DÝ�T‰?Œ?ðò!ð !ð !ð !õ 	�S˜!˜QÑÔ€AÝ�S˜!˜QÑÔ€AÝ•�Q�s”V‘”˜a¥ Q s¤V¡¤Ð-Ø	
ˆ3Œ�!�C”&‰˜!˜Dœ' 1Ð%Ø	
ˆ1ˆTŒ7‰�1�S”6Ñ	�4  #¤™<œ<¨!Ñ+¨QÐ/ð1ñ 	2ô 	2€Aõ �Q�q‰>Œ>ðò

ð 

ð 

ð 

ð 

ð 

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Øˆ2ˆa‰5Œ5Ð3Ò3Ð3Ð3Ð3Øˆ2ˆa�kŠk‰mŒmÑÔÐ ?Ò?Ð?Ð?Ð?Ð?Ð?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Øˆ2ˆa˜EÐ"Ñ"Ô"Ð&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Øˆ2ˆa˜I°%Ð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Ô6€IØˆ2ˆa˜9Ð%Ñ%Ô%­¬ð :ñ *ô *ò ð ð ð ð ð 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Ý˜Ñ!Ô!¥7¨7Ñ#3Ô#3Ð4€IØˆ2ˆd˜iÐ(Ñ(Ô(­H¬Oð =ñ -ô -ò ð ð ð ð ð 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Ý˜}Ñ-Ô-Ñ€A€qˆ!ˆQ��1Ø!€DØ�a�&˜!�  1˜v q˜kÐ*€IØˆ2ˆd˜iÐ(Ñ(Ô(­H¬Oð =ñ -ô -ò ð ð ð ð ð 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�} e¨E ]Ð3Ñ4Ô4ˆð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5å˜‘”¥¨¡¤µ¸±´ÅÈÁÄÐP€IØˆ2ˆd�IÑÔ¥(¤/ð 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Ý˜˜A˜aÑ Ô ¥<°°A°aÑ#8Ô#8Ñ8½<ÈÈAÈaÑ;PÔ;PÑP€DÝ˜S  1Ñ%Ô%€IØˆ2ˆd˜iÐ(Ñ(Ô(­H¬Oð =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Ð:TÀa½3¸q¹6¼6Ð: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È!½sÀ1¹v¼vÐ>XÐ>XÐ>XÐ>XÐ>XÐ>Xr)   )r$   Úranger    r¦   Újoin)r¨   rR   rQ   s      r*   Útest_1xN_vecsrÜ   ê  s@  € Ý	€BÝ�1�R‰[Œ[ð Zð ZˆÝ•5˜‘8”8ÑÔˆØˆr�!—+’+‘-”-Ñ Ô  B B q¡E¤EÒ)Ð)Ð)Ð)Øˆr�! $Ð'Ñ'Ô'¨2¨2¨a©5¬5Ò0Ð0Ð0Ð0ØˆqŠ5ˆ5Ø�AŠvˆvØ�r˜!‘u”u�u¨q¨q¨q°·²Ð:TÐ:TÍ5ÐQRÉ8Ì8Ð:TÑ:TÔ:TÑ1TÔ1TÐ1TÐ1TÐ UÒUÐUÐUÐUÐUà�r˜!‘u”u�u°1°1°1°T·Y²YÐ>XÐ>XÍuÐUVÉxÌxÐ>XÑ>XÔ>XÑ5XÔ5XÐ5XÐ5XÐ 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Ð3 Q˜˜Q˜q™S™Ð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ÐÝ�1�Q‰ZŒZð #~ñ #~ˆÝ�q˜‘”ð "	~ñ "	~ˆAÝÐFÐFÐFÐF½UÀ1¹X¼XÐFÑFÔFÑGÔGˆAÝ˜1‘”ˆBÝ$ Q°TÐ:Ñ:Ô:ˆLØ ­j©l¬l×.AÒ.AÀ!Ñ.DÔ.DÑ!DÀVÑ!KÑKÐØÐ!2°2Ñ!5°jÑ!@Ñ@ÐØÐ!<¸\Ñ!IÈ,Ñ!VÑVÐØÐ!DÑDÐØÐ!aÑaÐØ�AŠvˆv˜!˜qš&˜&Ø˜S’y�y�y�y�yØ�a’�˜A šF˜F q¨¢s s¨q°ªs¨sØ—}’} W¨q¡[Ñ1Ô1Ð1Ð1Ð1Ø#×.Ò.¨w¸©{Ñ;Ô;Ð;Ð;Ð;Ð;Ø�a’�˜A šF˜FØ—}’} UÑ+Ô+Ð+Ð+Ð+Ñ+Ø�a’�˜A šF˜FØ—}’} 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à—}’} \°Q°q±SÑ%9Ñ:Ô:Ð:Ð:Ð:Ø#×.Ò.¨|¸qÀ¹sÑ/CÑDÔDÐDÐDÐDÝ$ Q°$Ð7Ñ7Ô7�Ý%.¨q¸tÈtÐ%TÑ%TÔ%TÐ"Ø×*Ò*Ð*¸a¸a¸aÀÀÀÐ+BÑCÔCÐCÐCÐCØ)×4Ò4Ð4ÈÈÈÈ!È!È!Ð5LÑMÔMÐMÐMÐMØ#Ð%<¸XÑ%EÀjÑ%PÑPÐ#Ø#Ð%FÐGYÑ%YÐZfÑ%fÑfÐ#Ø#Ð%^Ñ^Ð#Ø#Ð%}Ñ}Ð#Ñ#ñE"	~ðF ÐØð ÝÐ4°SÑ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 */z�float[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)
)z�float[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 */z…float[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 */z™float[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)
)z…float[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)
))é   é   é   é   é   z�float[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 */z‡float[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 */z­float[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)
)z£float[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ÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
�1�a�&�Ñ
Ô
€Cà	€BØ#€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
�)�)�)�Ñ
Ô
€Cà	€BØ&€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
�,�,�,�Ñ
 Ô
 €Cà	€BØ)€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
�/�/�/Ð"Ñ
#Ô
#€Cà	&€BØ0€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø€Ø€ðñ ô €Cð 
€BØ#€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø€A€Ø€A€ðñ 	ô 	€Cð 
 €BØ)€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø 	€	€	Ø 	€	€	ðñ ô €Cð 
(€BØ1€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø €€Ø €€ðñ ô €Cð 
.€BØ7€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø €€Ø €€ðñ ô €Cð
€Bð€Lõ �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€HðÐõ �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@RÒRÐRÐRÐRå
Ø€Ø€Ø€ðñ ô €Cð
 
€BØ&€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø€A€Ø€A€Ø€A€ðñ 	ô 	€Cð
 
(€BØ1€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø 	€	€	Ø 	€	€	Ø 	€	€	ðñ ô €Cð
 
/€BØ8€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø €€Ø €€Ø €€ðñ ô €Cð
 
@€BØG€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø Ð Ð Ø Ð Ð Ø Ð Ð ðñ ô €Cð

€Bð
€Lõ �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€Hð
Ðõ �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@RÒRÐRÐRÐRå
Ø€Ø€Ø€Ø€ð	ñ ô €Cð 
 €BØ)€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø€A€Ø€A€Ø€A€Ø€A€ð	ñ 	ô 	€Cð 
.€BØ7€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø €€Ø €€Ø €€Ø €€ð	ñ ô €Cð 
B€BØF€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø Ð Ð Ø Ð Ð Ø Ð Ð Ø Ð Ð ð	ñ ô €Cð 
T€BØU€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø Ð Ð Ø Ð Ð Ø Ð Ð Ø Ð Ð ð	ñ ô €Cð
€Bð€Lõ �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€HðÐõ �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@RÒRÐRÐRÐRå
Ø€Ø€Ø€Ø€Ø€ðñ ô €Cð 
'€BØ0€Lå�S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<å
Ø€A€Ø€A€Ø€A€Ø€A€Ø€A€ðñ 	ô 	€Cð
€Bð€Lõ
 �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€HðÐõ
 �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@RÒRÐRÐRÐRå
Ø €€Ø €€Ø €€Ø €€Ø €€ðñ ô €Cð
€Bð€Lõ �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€HðÐõ �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@RÒRÐRÐRÐRå
Ø Ð Ð Ø Ð Ð Ø Ð Ð Ø Ð Ð Ø Ð Ð ðñ ô €Cð
€Bð€Lõ �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€HðÐõ �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@RÒRÐRÐRÐRå
Ø Ð Ð Ø Ð Ð Ø Ð Ð Ø Ð Ð Ø Ð Ð ðñ ô €Cð
€Bð€Lõ �S‰>Œ>˜RÒÐÐÐÝ�S tÐ,Ñ,Ô,°Ò<Ð<Ð<Ð<ð€HðÐõ �S DÐ)Ñ)Ô)¨XÒ5Ð5Ð5Ð5Ý�S D°tÐ<Ñ<Ô<Ð@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Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø €€€à
ˆ'�'Ñ
Ô
�€€1€að)ð )ð )ðIð Ið Ið+ð +ð +ð)ð )ð )ð+ð +ð +ð9ð 9ð 9ðVð Vð Vð4ð 4ð 4ð*ð *ð *ð
@ð @ð @ðð ð ð )ð )ð )ð
5ð 5ð 5ð0ð 0ð 0ð2ð ð ð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)   