§
    OŠtjÔ.  ã                   ó²  — 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mZmZmZ d dlmZmZmZmZmZmZmZ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(m)Z) d dl*m+Z+  ed	d
d¬¦  «        \  Z,Z-Z. edd¬¦  «        \  Z/Z0Z1d„ 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(S ))é    )ÚSÚpiÚooÚsymbolsÚRationalÚIntegerÚGoldenRatioÚ
EulerGammaÚCatalanÚLambdaÚDummyÚEqÚNeÚLeÚLtÚGtÚGeÚMod)	Ú	PiecewiseÚsinÚcosÚAbsÚexpÚceilingÚsqrtÚsignÚfloor)ÚITE)Úraises)Úimplemented_function)ÚIndexedBaseÚIdx)ÚMatrixSymbolÚSparseMatrixÚMatrix©Ú	rust_codezx,y,zFT)ÚintegerÚrealzk,m,n©r(   c                  óŽ   — t          t          d¦  «        ¦  «        dk    sJ ‚t          t          d¦  «        ¦  «        dk    sJ ‚d S )Né*   Ú42iÈÿÿÿz-56)r'   r   © ó    ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/tests/test_rust.pyÚtest_Integerr1      sF   € Ý•W˜R‘[”[Ñ!Ô! TÒ)Ð)Ð)Ð)Ý•W˜S‘\”\Ñ"Ô" eÒ+Ð+Ð+Ð+Ð+Ð+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   ÚxÚyr   r   r   r   r   r.   r/   r0   Útest_Relationalr5      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¦  «        ¦  «        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 ‚t          t          t          dd¦  «        z   ¦  «        d
k    sJ ‚t          t          dd¦  «        t          z  ¦  «        dk    sJ ‚d S )Né   é   z	3_f64/7.0é   é	   Ú2iùÿÿÿz
-3_f64/7.0éýÿÿÿzx + 3_f64/7.0z(3_f64/7.0)*x)r'   r   r3   r.   r/   r0   Útest_Rationalr=       sÚ   € Ý•X˜a ‘^”^Ñ$Ô$¨Ò3Ð3Ð3Ð3Ý•X˜b !‘_”_Ñ%Ô%¨Ò,Ð,Ð,Ð,Ý•X˜a ‘_”_Ñ%Ô%¨Ò5Ð5Ð5Ð5Ý•X˜b "Ñ%Ô%Ñ&Ô&¨+Ò5Ð5Ð5Ð5Ý•Q� ! Q™œÑ'Ñ(Ô(¨OÒ;Ð;Ð;Ð;Ý•X˜a ‘^”^¥AÑ%Ñ&Ô&¨/Ò9Ð9Ð9Ð9Ð9Ð9r/   c                  ó  — t          t          t          z   ¦  «        dk    sJ ‚t          t          t          z
  ¦  «        dk    sJ ‚t          t          t          z  ¦  «        dk    sJ ‚t          t          t          z  ¦  «        dk    sJ ‚t          t           ¦  «        dk    sJ ‚t          dt          z  ¦  «        dk    sJ ‚t          t          dz   ¦  «        dk    sJ ‚t          t          t          z   ¦  «        d	k    sJ ‚d S )
Nzx + yzx - yzx*yzx*y.recip()z-xé   z2.0*xzy + 2.0zn as f64 + x)r'   r3   r4   Únr.   r/   r0   Útest_basic_opsrA   )   sì   € Ý•Q�‘UÑÔ˜wÒ&Ð&Ð&Ð&Ý•Q�‘UÑÔ˜wÒ&Ð&Ð&Ð&Ý•Q�‘UÑÔ˜uÒ$Ð$Ð$Ð$Ý•Q�‘UÑÔ˜}Ò,Ð,Ð,Ð,Ý•a�R‰=Œ=˜DÒ Ð Ð Ð Ý�Q�‘UÑÔ˜wÒ&Ð&Ð&Ð&Ý•Q˜‘UÑÔ˜yÒ(Ð(Ð(Ð(Ý•Q�‘UÑÔ˜~Ò-Ð-Ð-Ð-Ð-Ð-r/   c                  óÊ   —  G d„ dt           ¦  «        } t           | t          ¦  «        ¦  «        dk    sJ ‚t          ddd¦  «        }t          |d         ¦  «        dk    sJ ‚d S )	Nc                   ó   — e Zd Zd„ ZdS )útest_printmethod.<locals>.fabsc                 óH   — d|                      | j        d         ¦  «        z  S )Nz	%s.fabs()r   )Ú_printÚargs)ÚselfÚprinters     r0   Ú
_rust_codez)test_printmethod.<locals>.fabs._rust_code5   s   € Ø §¢°´	¸!´Ñ!=Ô!=Ñ=Ð=r/   N)Ú__name__Ú
__module__Ú__qualname__rJ   r.   r/   r0   ÚfabsrD   4   s#   € € € € € ð	>ð 	>ð 	>ð 	>ð 	>r/   rN   zx.fabs()Úaé   r7   )r   r   za[0])r   r'   r3   r#   )rN   rO   s     r0   Útest_printmethodrQ   3   sƒ   € ð>ð >ð >ð >ð >�sñ >ô >ð >õ �T�T�!‘W”WÑÔ Ò+Ð+Ð+Ð+Ý�S˜!˜QÑÔ€AÝ�Q�s”VÑÔ Ò&Ð&Ð&Ð&Ð&Ð&r/   c                  ó¸  — t          t          t          ¦  «        t          t          ¦  «        z  ¦  «        dk    sJ ‚t          t	          t          ¦  «        ¦  «        dk    sJ ‚t          t          t          ¦  «        ¦  «        dk    sJ ‚t          t          t          ¦  «        ¦  «        dk    sJ ‚t          t          t          d¦  «        ¦  «        dk    sJ ‚d S )Nzx.sin().powf(x.cos())zx.abs()úx.ceil()z	x.floor()r7   zx - 3.0*((1_f64/3.0)*x).floor())r'   r   r3   r   Úabsr   r   r   r.   r/   r0   Útest_FunctionsrU   <   s´   € Ý•S�‘V”V�s¥1™vœvÑ%Ñ&Ô&Ð*AÒAÐAÐAÐAÝ•S�‘V”VÑÔ 	Ò)Ð)Ð)Ð)Ý•W�Q‘Z”ZÑ Ô  JÒ.Ð.Ð.Ð.Ý•U�1‘X”XÑÔ +Ò-Ð-Ð-Ð-õ •S�˜A‘Y”YÑÔÐ#DÒDÐDÐDÐDÐDÐDr/   c                  óª  — t          dt          z  ¦  «        dk    sJ ‚t          t          dz  ¦  «        t          t          dz  ¦  «        cxk    rdk    sn J ‚t          t          t          ¦  «        ¦  «        dk    sJ ‚t          t          t          j        z  ¦  «        t          t          dz  ¦  «        cxk    rdk    sn J ‚t          dt          t          ¦  «        z  ¦  «        dk    sJ ‚t          t          t          j         z  ¦  «        t          t          dz  ¦  «        cxk    rdk    sn J ‚t          dt
          z  ¦  «        d	k    sJ ‚t          t
          dz  ¦  «        t          t
          dz  ¦  «        cxk    rd	k    sn J ‚t          t
          dz  ¦  «        d
k    sJ ‚t          t          t          dd¦  «        z  ¦  «        dk    sJ ‚t          dt          z  ¦  «        dk    sJ ‚t          t          t          ¦  «        ¦  «        dk    sJ ‚t          t          dz  ¦  «        dk    sJ ‚t          t          t          dz  z  ¦  «        dk    sJ ‚t          t          t          dd¦  «        z  ¦  «        dk    sJ ‚t          dt          t          dt          z  ¦  «        ¦  «        } t          d | t          ¦  «        dz  t          t          t          z  z
  z  z  t          dz  t          z   z  ¦  «        dk    sJ ‚d„ ddfd„ ddfg}t          t          dz  d|i¬¦  «        dk    sJ ‚t          t          dz  d|i¬¦  «        dk    sJ ‚d S )NrP   z	x.recip()éÿÿÿÿg      ð¿zx.sqrt()g      à?zx.sqrt().recip()g      à¿z
PI.recip()zPI.sqrt().recip()r7   zx.cbrt()r?   zx.exp2()zx.exp()z	x.powi(3)zx.powf(y.powi(3))zx.powf(2_f64/3.0)Úgg      @z0(3.5*2.0*x).powf(-x + y.powf(x))/(x.powi(2) + y)c                 ó   — |j         S ©N©Ú
is_integer©Úbaser   s     r0   ú<lambda>ztest_Pow.<locals>.<lambda>]   s   €  c¤n€ r/   Údpowic                 ó   — |j          S rZ   r[   r]   s     r0   r_   ztest_Pow.<locals>.<lambda>^   s   € ¨#¬.Ð&8€ r/   ÚpowÚPow©Úuser_functionsz
x.dpowi(3)gš™™™™™	@z
x.pow(3.2))r'   r3   r   r   ÚHalfr   r   r   r4   r    r   )rX   Ú_cond_cfuncs     r0   Útest_Powrh   F   s6  € Ý�Q•q‘S‰>Œ>˜[Ò(Ð(Ð(Ð(Ý•Q˜‘UÑÔ�y­¨D©Ñ1Ô1Ð@Ð@Ò@Ð@°[Ò@Ð@Ð@Ð@Ð@Ð@Ý•T�!‘W”WÑÔ Ò+Ð+Ð+Ð+Ý•Q�œ‘YÑÔ¥9­Q°©VÑ#4Ô#4ÐBÐBÒBÐB¸
ÒBÐBÐBÐBÐBÐBå�Q•t�A‘w”w‘YÑÔÐ#5Ò5Ð5Ð5Ð5Ý•Q�œ˜‘ZÑ Ô ¥I­a°©gÑ$6Ô$6ÐLÐLÒLÐLÐ:LÒLÐLÐLÐLÐLÐLå�Q•r‘T‰?Œ?˜lÒ*Ð*Ð*Ð*Ý•R˜‘VÑÔ¥	­"¨d©(Ñ 3Ô 3ÐCÐCÒCÐC°|ÒCÐCÐCÐCÐCÐCÝ•R˜‘XÑÔÐ"5Ò5Ð5Ð5Ð5å•Q�  A™œÑ&Ñ'Ô'¨:Ò5Ð5Ð5Ð5Ý�Q�‘T‰?Œ?˜jÒ(Ð(Ð(Ð(Ý•S�‘V”VÑÔ 	Ò)Ð)Ð)Ð)Ý•Q˜‘T‰?Œ?˜kÒ)Ð)Ð)Ð)Ý•Q�˜A™‘YÑÔÐ#6Ò6Ð6Ð6Ð6Ý•Q�  A™œÑ&Ñ'Ô'Ð+>Ò>Ð>Ð>Ð>å˜S¥&­¨A­a©C¡.¤.Ñ1Ô1€AÝ�Q˜˜�!™œ˜S™¥A­­1©¡HÑ-Ñ-­q°!©tµa©xÑ8Ñ9Ô9Ø:ò;ð ;ð ;ð ;à4Ð4°g¸qÐAØ8Ð8¸%ÀÐCðE€Kå•Q˜‘T¨5°+Ð*>Ð?Ñ?Ô?À<ÒOÐOÐOÐOÝ•Q˜‘V¨U°KÐ,@ÐAÑAÔAÀ\ÒQÐQÐQÐQÐQÐQr/   c                  óà  — t          t          ¦  «        dk    sJ ‚t          t          ¦  «        dk    sJ ‚t          t          j        ¦  «        dk    sJ ‚t          t           ¦  «        dk    sJ ‚t          t          j        ¦  «        dk    sJ ‚t          t          j        ¦  «        dk    sJ ‚t          t          d¦  «        ¦  «        dk    sJ ‚t          t          j        ¦  «        dk    sJ ‚d S )NÚPIÚINFINITYÚNEG_INFINITYÚNANrP   ÚE)	r'   r   r   r   ÚInfinityÚNegativeInfinityÚNaNr   ÚExp1r.   r/   r0   Útest_constantsrs   c   sÛ   € Ý•R‰=Œ=˜DÒ Ð Ð Ð Ý•R‰=Œ=˜JÒ&Ð&Ð&Ð&Ý•Q”ZÑ Ô  JÒ.Ð.Ð.Ð.Ý•b�S‰>Œ>˜^Ò+Ð+Ð+Ð+Ý•QÔ'Ñ(Ô(¨NÒ:Ð:Ð:Ð:Ý•Q”UÑÔ˜uÒ$Ð$Ð$Ð$Ý•S˜‘V”VÑÔ Ò#Ð#Ð#Ð#Ý•Q”VÑÔ Ò#Ð#Ð#Ð#Ð#Ð#r/   c                  ó2  — t          dt          z  ¦  «        dt          j        d¦  «        z  k    sJ ‚t          dt          z  ¦  «        dt          j        d¦  «        z  k    sJ ‚t          dt          z  ¦  «        dt	          j        d¦  «        z  k    sJ ‚d S )Nr?   z,const GoldenRatio: f64 = %s;
2.0*GoldenRatioé   z$const Catalan: f64 = %s;
2.0*Catalanz*const EulerGamma: f64 = %s;
2.0*EulerGamma)r'   r	   Úevalfr   r
   r.   r/   r0   Útest_constants_otherrw   n   s§   € Ý�Q•{‘]Ñ#Ô#Ð'VÕYdÔYjÐkmÑYnÔYnÑ'nÒnÐnÐnÐnÝØ�g‰Iñô ØAÅGÄMÐRTÑDUÔDUÑUòVð Vð Vð Vå�Q•z‘\Ñ"Ô"Ð&SÕV`ÔVfÐgiÑVjÔVjÑ&jÒjÐjÐjÐjÐjÐjr/   c                  óä  — t          d¦  «        dk    sJ ‚t          t          j        ¦  «        dk    sJ ‚t          d¦  «        dk    sJ ‚t          t          j        ¦  «        dk    sJ ‚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 )NTÚtrueFÚfalsezk && mzk || mz!kzk && m && nzk || m || nzn || k && mzn && (k || m))r'   r   ry   rz   ÚkÚmr@   r.   r/   r0   Útest_booleanr}   u   sE  € Ý�T‰?Œ?˜fÒ$Ð$Ð$Ð$Ý•Q”VÑÔ Ò&Ð&Ð&Ð&Ý�UÑÔ˜wÒ&Ð&Ð&Ð&Ý•Q”WÑÔ Ò(Ð(Ð(Ð(Ý•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          ‰ dd¬¦  «        d	k    sJ ‚t          t          t          dk     ft          dz   t          d
k     ft          dz   df¦  «        Š t          ‰ d¬¦  «        dk    sJ ‚t          ‰ dd¬¦  «        dk    sJ ‚t          ‰ d¬¦  «        dk    sJ ‚dt          t          t          dk     ft          dz   t          d
k     ft          dz   df¦  «        z  Š t          ‰ d¬¦  «        dk    sJ ‚dt          t          t          dk     ft          dz   t          d
k     ft          dz   df¦  «        z  dz
  Š 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 )NrP   r?   Tz+if (x < 1.0) {
    x
} else {
    x + 2.0
}Úr©Ú	assign_toz0r = if (x < 1.0) {
    x
} else {
    x + 2.0
};)r�   Úinlinez(r = if (x < 1.0) { x } else { x + 2.0 };é   )r‚   zAif (x < 1.0) { x } else if (x < 5.0) { x + 1.0 } else { x + 2.0 }zFr = if (x < 1.0) { x } else if (x < 5.0) { x + 1.0 } else { x + 2.0 };zRr = if (x < 1.0) {
    x
} else if (x < 5.0) {
    x + 1.0
} else {
    x + 2.0
};zE2.0*if (x < 1.0) { x } else if (x < 5.0) { x + 1.0 } else { x + 2.0 }r,   zL2.0*if (x < 1.0) { x } else if (x < 5.0) { x + 1.0 } else { x + 2.0 } - 42.0r   c                  ó"   •— t          ‰ ¦  «        S rZ   r&   ©Úexprs   €r0   r_   z test_Piecewise.<locals>.<lambda>¨   s   ø€ �y¨™œ€ r/   )r   r3   r'   r   r   Ú
ValueErrorr…   s   @r0   Útest_Piecewiserˆ   ƒ   s^  ø€ Ý•a�˜Qš�Z¥! a¡%¨ Ñ/Ô/€DÝ�T‰?Œ?ðòð ð ð õ �T SÐ)Ñ)Ô)ð	òð ð ð õ �T S°Ð6Ñ6Ô6Ø2ò4ð 4ð 4ð 4å•a�˜Qš�Z¥! a¡%­¨Qª µ!°a±%¸°Ñ?Ô?€DÝ�T $Ð'Ñ'Ô'ØKòMð Mð Mð Må�T S°Ð6Ñ6Ô6ØPòRð Rð Rð Rå�T SÐ)Ñ)Ô)ð	òð ð ð ð �Y��1˜qš5�z¥A¨¡E­1¨qª5 >µA¸±E¸4°=ÑAÔAÑA€DÝ�T $Ð'Ñ'Ô'ØOòQð Qð Qð Qà�Y��1˜qš5�z¥A¨¡E­1¨qª5 >µA¸±E¸4°=ÑAÔAÑAÀBÑF€DÝ�T $Ð'Ñ'Ô'ØVòXð Xð Xð Xõ •a�˜Qš�Z¥! Q¡$­¨Aª µµQ±´½¸Qº°Ñ@Ô@€DÝ
�:Ð.Ð.Ð.Ð.Ñ/Ô/Ð/Ð/Ð/r/   c                  ó˜   — t           t          z   t          t          ¦  «        z   t          z   } t	          | t          g¬¦  «        dk    sJ ‚d S )N©Údereferencezx + y + (*z) + (*z).sin())r3   r4   r   Úzr'   r…   s    r0   Útest_dereference_printingr�   «   sA   € Ý�q‰5•3•q‘6”6‰>�AÑ€DÝ�T­ sÐ+Ñ+Ô+Ð/JÒJÐJÐJÐJÐJÐJr/   c                  ó˜  — t          t          ¦  «        t          z  } t          | ¦  «        dk    sJ ‚t          | d¬¦  «        dk    sJ ‚t          t          t          z   ¦  «        dz   } t          | ¦  «        dk    sJ ‚t          | d¬¦  «        dk    sJ ‚t          t	          t          ¦  «        ¦  «        } t          | ¦  «        dk    sJ ‚d S )	Nz6y*(if (x == 0.0) { 0.0 } else { (x).signum() }) as f64r   r€   z;r = y*(if (x == 0.0) { 0.0 } else { (x).signum() }) as f64;r,   z:(if (x + y == 0.0) { 0.0 } else { (x + y).signum() }) + 42z?r = (if (x + y == 0.0) { 0.0 } else { (x + y).signum() }) + 42;z9(if (x.cos() == 0.0) { 0.0 } else { (x.cos()).signum() }))r   r3   r4   r'   r   r…   s    r0   Ú	test_signr�   °   sÂ   € Ý•‰7Œ7•Q‰;€DÝ�T‰?Œ?ÐVÒVÐVÐVÐVÝ�T SÐ)Ñ)Ô)Ð-jÒjÐjÐjÐjå••A‘‰;Œ;˜Ñ€DÝ�T‰?Œ?ÐZÒZÐZÐZÐZÝ�T SÐ)Ñ)Ô)Ð-nÒnÐnÐnÐnå••A‘”‰<Œ<€DÝ�T‰?Œ?ÐYÒYÐYÐYÐYÐYÐYr/   c                  óL  — t          d¦  «        \  } }t          |¦  «        }t          |¦  «        dk    sJ ‚t          ||g¬¦  «        dk    sJ ‚t          |d¬¦  «        dk    sJ ‚t          t          ¦  «        5  t          |d¬	¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )
Nzx ifz	if_.sin()rŠ   z(*if_).sin()Ú_unreserved)Úreserved_word_suffixzif_unreserved.sin()T)Úerror_on_reserved)r   r   r'   r   r‡   )r3   r4   r†   s      r0   Útest_reserved_wordsr”   ½   s÷   € å�6‰?Œ?�D€A€qåˆq‰6Œ6€DÝ�T‰?Œ?˜kÒ)Ð)Ð)Ð)Ý�T¨ sÐ+Ñ+Ô+¨~Ò=Ð=Ð=Ð=Ý�T°Ð>Ñ>Ô>ÐBWÒWÐWÐWÐWå	•
Ñ	Ô	ð 0ð 0Ý�$¨$Ð/Ñ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   Á:BÂBÂ Bc                  óx   — t          t          dk     t          t          ¦  «        } t	          | ¦  «        dk    sJ ‚d S )NrP   z#if (k < 1) {
    m
} else {
    n
})r   r{   r|   r@   r'   )Úekprs    r0   Útest_ITEr—   Ê   sC   € Ý�q�1Šu•a�ÑÔ€DÝ�T‰?Œ?ðòð ð ð ð ð r/   c                  ó–  — t          dd¬¦  «        \  } }}t          d| ¦  «        t          d|¦  «        t          d|¦  «        }}}t          d¦  «        |         }t          |¦  «        dk    sJ ‚t          d	¦  «        ||f         }t          |¦  «        d
k    sJ ‚t          d¦  «        |||f         }t          |¦  «        dk    sJ ‚d S )Nzn m oTr*   ÚiÚjr{   r3   zx[j]ÚAz
A[m*i + j]ÚBzB[m*o*i + o*j + k])r   r"   r!   r'   )	r@   r|   Úor™   rš   r{   r3   r›   rœ   s	            r0   Útest_Indexedrž   Ô   sË   € Ý�g tÐ,Ñ,Ô,�G€A€qˆ!Ý�#�q‰kŒk�3˜s A™;œ;­¨C°©¬ˆ!€q€Aå�CÑÔ˜Ô€AÝ�Q‰<Œ<˜6Ò!Ð!Ð!Ð!å�CÑÔ˜˜A˜Ô€AÝ�Q‰<Œ<˜<Ò'Ð'Ð'Ð'å�CÑÔ˜˜A˜q˜Ô!€AÝ�Q‰<Œ<Ð/Ò/Ð/Ð/Ð/Ð/Ð/r/   c                  óÜ   — t          ddt          ¬¦  «        \  } }t          d¦  «        }t          d¦  «        }t          | |¦  «        } t	          ||          ||          ¬¦  «        dk    sJ ‚d S )Nzi mT)r(   Úclsr3   r4   r€   z"for i in 0..m {
    y[i] = x[i];
})r   r   r!   r"   r'   )r™   r|   r3   r4   s       r0   Útest_dummy_loopsr¡   â   s|   € Ý�5 $­EÐ2Ñ2Ô2�D€A€qÝ�CÑÔ€AÝ�CÑÔ€AÝˆAˆq‰	Œ	€Aå�Q�q”T Q q¤TÐ*Ñ*Ô*ð	òð ð ð ð ð r/   c                  óÂ  — t          dd¬¦  «        \  } }t          d¦  «        }t          d¦  «        }t          d¦  «        }t          d¦  «        }t          d| ¦  «        }t          d	|¦  «        }t          |||f         ||         z  ||         ¬
¦  «        dk    sJ ‚t          |||f         ||         z  ||         z   ||         z   ||         ¬
¦  «        dk    sJ ‚d S )Nzm nTr*   r›   r3   r4   rŒ   r™   rš   r€   zrfor i in 0..m {
    y[i] = 0;
}
for i in 0..m {
    for j in 0..n {
        y[i] = A[n*i + j]*x[j] + y[i];
    }
}z|for i in 0..m {
    y[i] = x[i] + z[i];
}
for i in 0..m {
    for j in 0..n {
        y[i] = A[n*i + j]*x[j] + y[i];
    }
}©r   r!   r"   r'   )r|   r@   r›   r3   r4   rŒ   r™   rš   s           r0   Ú
test_loopsr¤   î   sþ   € Ý�5 $Ð'Ñ'Ô'�D€A€qÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€Aå�Q�q˜!�t”W˜Q˜qœT‘\¨Q¨q¬TÐ2Ñ2Ô2ð	òð ð ð õ �Q�q˜!�t”W˜Q˜qœT‘\ A a¤DÑ(¨1¨Q¬4Ñ/¸1¸Q¼4Ð@Ñ@Ô@ð	òð ð ð ð ð r/   c                  óÚ  — t          dd¬¦  «        \  } }}}t          d¦  «        }t          d¦  «        }t          d¦  «        }t          d|¦  «        }t          d| ¦  «        }t          d	|¦  «        }	t          d
|¦  «        }
t          |||	|
f         ||||	|
f         z  ||         ¬¦  «        d|| z  |z  |z  ||z  |z  z   |	|z  z   |
z   ›d||z  |z  |	|z  z   |
z   ›d�dz   k    sJ ‚d S )Nzn m o pTr*   rO   Úbr4   r™   rš   r{   Úlr€   z‘for i in 0..m {
    y[i] = 0;
}
for i in 0..m {
    for j in 0..n {
        for k in 0..o {
            for l in 0..p {
                y[i] = a[z]*b[ú
] + y[i];
ú            }
        }
    }
}r£   )r@   r|   r�   ÚprO   r¦   r4   r™   rš   r{   r§   s              r0   Ú test_loops_multiple_contractionsr«     s0  € Ý˜¨DÐ1Ñ1Ô1�J€A€qˆ!ˆQÝ�CÑÔ€AÝ�CÑÔ€AÝ�CÑÔ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€AÝˆC�‰Œ€Aå�Q�q˜!˜Q�w”Z  ! Q¨¨1 *¤Ñ-¸¸1¼Ð>Ñ>Ô>Ð>ð ;<¸A¹#¸a¹%À¹'ÀAÀaÁCÈÁE¹/ÈAÈaÉCÑ:OÐRSÑ:SÐ:SÐ:SÐUVÐWXÑUXÐYZÑUZÐ]^Ð_`Ñ]`ÑU`ÐcdÑUdÐUdÐUdð	fð	ñ	òð ð ð ð ð r/   c            	      óR  — t          dd¬¦  «        \  } }}}t          d¦  «        }t          d¦  «        }t          d¦  «        }t          d¦  «        }t          d| ¦  «        }t          d	|¦  «        }	t          d
|¦  «        }
t          d|¦  «        }t          |||	|
|f         |||	|
|f         z   ||	|
|f         z  ||         ¬¦  «        }|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   k    sJ ‚d S )Nzm n o pTr*   rO   r¦   Úcr4   r™   rš   r{   r§   r€   z’for i in 0..m {
    y[i] = 0;
}
for i in 0..m {
    for j in 0..n {
        for k in 0..o {
            for l in 0..p {
                y[i] = (a[z] + b[z])*c[r¨   r©   r£   )r|   r@   r�   rª   rO   r¦   r­   r4   r™   rš   r{   r§   Úcodes                r0   Útest_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˜˜1˜a ˜
”m a¨¨1¨a°¨
¤mÑ3°Q°q¸!¸Q°w´ZÑ?È1ÈQÌ4ÐPÑPÔP€DØˆ4ð EFÀaÁCÈÁEÈ!ÁGÈaÐPQÉcÐRSÉeÁOÐVWÐXYÑVYÑDYÐ\]ÑD]ÐD]ÐD]Ð_`ÐabÑ_bÐcdÑ_dÐefÑ_fÐijÐklÑilÐmnÑinÑ_nÐqrÐstÑqtÑ_tÐwxÑ_xÐ_xÐ_xÐz{Ð|}Ñz}Ð~Ñzð  CDð  EFñ  CFñ  {Fð  IJñ  {Jð  {Jð  {Jð	Kð	ñ	òð ð ð ð ð r/   c                  ó2   — t          t          d„ ¦  «         d S )Nc                  óH   — t          t          t          ¦  «        d¬¦  «        S )NÚgarbage)Úmethod)r'   r   r3   r.   r/   r0   r_   ztest_settings.<locals>.<lambda>A  s   € �i­­A©¬°yÐAÑAÔA€ r/   )r   Ú	TypeErrorr.   r/   r0   Útest_settingsrµ   @  s   € Ý
�9ÐAÐAÑBÔBÐBÐBÐBr/   c            	      ób  — t          d¦  «        } t          dt          | d| z  ¦  «        ¦  «        }t           || ¦  «        ¦  «        dk    sJ ‚t          dt          | d| z  t          z  ¦  «        ¦  «        }t           || ¦  «        ¦  «        dt	          j        d¦  «        z  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 )Nr3   rX   r?   z2*xz&const Catalan: f64 = %s;
2.0*x/Catalanru   r›   r™   r@   Tr*   rP   r€   z8for i in 0..n {
    A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r    r   r'   r   rv   r!   r"   )r3   rX   r›   r™   s       r0   Útest_inline_functionr·   D  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‰?Œ?Ø1µG´MÀ"Ñ4EÔ4EÑEòGð Gð Gð Gõ 	�CÑÔ€AÝˆC•˜ dÐ+Ñ+Ô+Ñ,Ô,€AÝ˜S¥&¨¨A¨q°1©u©I°q¸1±uÑ,=Ñ">Ô">Ñ?Ô?€AÝ�Q�Q�q˜”t‘W”W¨¨!¬Ð-Ñ-Ô-ð	òð ð ð ð ð r/   c                  ó@  — t          dd¬¦  «        } t          dd¬¦  «        }dd„ dd	fd
„ dd	fgdœ}t          t          | ¦  «        |¬¦  «        dk    sJ ‚t          t          | ¦  «        |¬¦  «        dk    sJ ‚t          t          |¦  «        |¬¦  «        dk    sJ ‚d S )Nr3   Fr*   r@   TÚceilc                 ó   — | j          S rZ   r[   ©r3   s    r0   r_   z%test_user_functions.<locals>.<lambda>[  s   € ˜qœ|Ð+€ r/   rN   é   c                 ó   — | j         S rZ   r[   r»   s    r0   r_   z%test_user_functions.<locals>.<lambda>[  s   € ÀAÄL€ r/   rT   )r   r   rd   rS   zfabs(x)zabs(n))r   r'   r   r   )r3   r@   Úcustom_functionss      r0   Útest_user_functionsr¿   V  sÌ   € Ý�˜UÐ#Ñ#Ô#€AÝ�˜TÐ"Ñ"Ô"€AàØ+Ð+¨V°QÐ7Ð:PÐ:PÐRWÐYZÐ9[Ð\ðð Ðõ •W˜Q‘Z”ZÐ0@ÐAÑAÔAÀZÒOÐOÐOÐOÝ•S˜‘V”VÐ,<Ð=Ñ=Ô=ÀÒJÐJÐJÐJÝ•S˜‘V”VÐ,<Ð=Ñ=Ô=ÀÒIÐIÐIÐIÐIÐIr/   c                  óæ   — t          t          g d¢¦  «        ¦  «        dk    sJ ‚t          t          ¦  «        5  t          t          g d¢g¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )N©rP   r?   r7   z	[1, 2, 3])r'   r%   r   r‡   r.   r/   r0   Útest_matrixrÂ   b  sµ   € Ý•V˜I˜I˜IÑ&Ô&Ñ'Ô'¨;Ò6Ð6Ð6Ð6Ý	•
Ñ	Ô	ð 'ð 'Ý•&˜)˜)˜)˜Ñ%Ô%Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð 'ð 's   ¹ A&Á&A*Á-A*c                  óž   — t          t          ¦  «        5  t          t          g d¢g¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÁ   )r   ÚNotImplementedErrorr'   r$   r.   r/   r0   Útest_sparse_matrixrÅ   h  s‘   € å	Õ#Ñ	$Ô	$ð -ð -Ý•, 	 	 	˜{Ñ+Ô+Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -s   • AÁAÁ	AN)KÚ
sympy.corer   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Úsympy.functionsr   r   r   r   r   r   r   r   r   Úsympy.logicr   Úsympy.testing.pytestr   Úsympy.utilities.lambdifyr    Úsympy.tensorr!   r"   Úsympy.matricesr#   r$   r%   Úsympy.printing.codeprinterr'   r3   r4   rŒ   r{   r|   r@   r1   r5   r=   rA   rQ   rU   rh   rs   rw   r}   rˆ   r�   r�   r”   r—   rž   r¡   r¤   r«   r¯   rµ   r·   r¿   rÂ   rÅ   r.   r/   r0   ú<module>rÎ      s†  ðð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð*ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *à Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à 0Ð 0Ð 0Ð 0Ð 0Ð 0à
ˆ'�' 5¨tÐ
4Ñ
4Ô
4�€€1€aØ
ˆ'�' 4Ð
(Ñ
(Ô
(�€€1€að,ð ,ð ,ð
+ð +ð +ð:ð :ð :ð.ð .ð .ð'ð 'ð 'ðEð Eð EðRð Rð Rð:$ð $ð $ðkð kð kð5ð 5ð 5ð%0ð %0ð %0ðPKð Kð Kð

Zð 
Zð 
Zð
0ð 
0ð 
0ðð ð ð0ð 0ð 0ð	ð 	ð 	ðð ð ð<ð ð ð2ð ð ð6Cð Cð Cðð ð ð$	Jð 	Jð 	Jð'ð 'ð 'ð-ð -ð -ð -ð -r/   