
    Xh.                        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*   42iz-56)r'   r        p/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/printing/tests/test_rust.pytest_Integerr1      sF    WR[[!!T))))WS\\""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1XX(****R1XX(****R1XX(****R1XX'))))R1XX'))))R1XX(******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   	   2iz
-3_f64/7.0zx + 3_f64/7.0z(3_f64/7.0)*x)r'   r   r3   r.   r/   r0   test_Rationalr=       s    Xa^^$$3333Xb!__%%,,,,Xa__%%5555Xb"%%&&+5555Q!Q'((O;;;;Xa^^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},,,,aR==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 > > > TT!WW++++S!QAQsV&&&&&&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VVs1vv%&&*AAAAASVV	))))WQZZ  J....U1XX+---- SAYY#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    cn 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   QqS>>[((((QUyD11@@@@[@@@@@@T!WW++++QY9QV#4#4BBBB
BBBBBBQtAwwY#55555QZ  Iag$6$6LLLL:LLLLLLLQrT??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VV	))))QT??k))))QAY#66666QA&''+>>>>>S&AaC..11AQ!SA1H--q!tax899:; ; ; ;44gqA88%CEKQT5+*>???<OOOOQVUK,@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&&&&QZ  J....bS>>^++++Q'((N::::QUu$$$$SVV####QV######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{]##'VYdYjkmYnYn'nnnnngI AGMRTDUDUUV V V VQz\""&SV`VfgiVjVj&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$$$$QV&&&&Uw&&&&QW((((QUx''''QUx''''aR==D    QUQY=0000QUQY=0000a!eq[!!]2222a!eq[!!_444444r/   c                  $    t          t          t          dk     ft          dz   df           t                     dk    sJ t           d          dk    sJ t           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??    TS)))	    TS66624 4 4 4aQZ!a%Q!a%??DT$'''KM M M MTS666PR R R RTS)))	    Y1q5zAE1q5>AE4=AAADT$'''OQ Q Q QY1q5zAE1q5>AE4=AAABFD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    q53q66>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    77Q;DT??VVVVVTS)))-jjjjjA;;DT??ZZZZZTS)))-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??DAqq66D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    q1ua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    gt,,,GAq!#qkk3sA;;C!qACAQ<<6!!!!CAAQ<<<''''CAq!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2DAqCACAAq		AQqTQqT***	     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$'''DAqCACACACACACAQq!tWQqT\QqT222	    Qq!tWQqT\AaD(1Q4/1Q4@@@	     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   zfor 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1JAq!QCACACACACACACAQq!QwZ!Q1*-1>>>> ;<A#a%'AaCE/AaC:ORS:S:S:SUVWXUXYZUZ]^_`]`U`cdUdUdUd	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   zfor 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1JAq!QCACACACACACACACAa1a
ma1a
m3Qq!QwZ?1Q4PPPD4 EFaCE!GaPQcRSeOVWXYVYDY\]D]D]D]_`ab_bcd_def_fijklilmnin_nqrstqt_twx_x_x_xz{|}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&AaC..11AQQqTT??e####S&AaCK"8"899AQQqTT??1GM"4E4EEG G G G 	CACd+++,,AS&Aq1uIq1u,=">">??AQQqtWW!---	     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    AL 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++VQ7:P:PRWYZ9[\  WQZZ0@AAAZOOOOSVV,<===JJJJSVV,<===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    VIII&&'';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
''5t
4
4
41a
''4
(
(
(1a, , ,
+ + +: : :. . .' ' 'E E ER R R:$ $ $k k k5 5 5%0 %0 %0PK K K

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