
    sg,                        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	      \  Z,Z-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" ZGy#)$    )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,zc                  h    t        t        d            dk(  sJ t        t        d            dk(  sJ y )N*   42iz-56)r'   r        Q/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_rust.pytest_Integerr.      s0    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 y )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	r'   r   xyr   r   r   r   r   r+   r,   r-   test_Relationalr2      s    R1X(***R1X(***R1X(***R1X')))R1X')))R1X(***r,   c                  X   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 y )N      z	3_f64/7.0   	   2iz
-3_f64/7.0zx + 3_f64/7.0z(3_f64/7.0)*x)r'   r   r0   r+   r,   r-   test_Rationalr:      s    Xa^$333Xb!_%,,,Xa_%555Xb"%&+555Q!Q'(O;;;Xa^A%&/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 y )Nzx + yzx - yzx*yzx/yz-x)r'   r0   r1   r+   r,   r-   test_basic_opsr<   (   sr    QUw&&&QUw&&&QUu$$$QUu$$$aR=D   r,   c                       G d dt               } t         | t                    dk(  sJ t        ddd      }t        |d         dk(  sJ y )	Nc                       e Zd Zd Zy)test_printmethod.<locals>.fabsc                 D    d|j                  | j                  d         z  S )Nz	%s.fabs()r   )_printargs)selfprinters     r-   
_rust_codez)test_printmethod.<locals>.fabs._rust_code2   s    		!!===r,   N)__name__
__module____qualname__rE   r+   r,   r-   fabsr?   1   s    	>r,   rI   zx.fabs()a   r4   )r   r   za[0])r   r'   r0   r#   )rI   rJ   s     r-   test_printmethodrL   0   sL    >s > T!W+++S!QAQsV&&&r,   c                  H   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 y )Nzx.sin().powf(x.cos())zx.abs()x.ceil()z	x.floor()r4   zx - 3*((1_f64/3.0)*x).floor())r'   r   r0   r   absr   r   r   r+   r,   r-   test_FunctionsrP   9   s    SVs1v%&*AAAASV	)))WQZ J...U1X+--- SAY#BBBBr,   c                  j   t        dt        z        dk(  sJ t        t        dz        t        t        dz        cxk(  rdk(  sJ  J t        t        t                    dk(  sJ t        t        t        j                  z        t        t        dz        cxk(  rdk(  sJ  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J  J t        dt
        z        d	k(  sJ t        t
        dz        t        t
        dz        cxk(  rd	k(  sJ  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 y )NrK   z	x.recip()g      zx.sqrt()g      ?zx.sqrt().recip()g      z
PI.recip()zPI.sqrt().recip()r4   zx.cbrt()   zx.exp2()zx.exp()z	x.powi(3)zx.powf(y.powi(3))zx.powf(2_f64/3.0)gg      @z.(3.5*2*x).powf(-x + y.powf(x))/(x.powi(2) + y)c                     |j                   S N
is_integerbaser   s     r-   <lambda>ztest_Pow.<locals>.<lambda>Z   s
    cnn r,   dpowic                     |j                    S rV   rW   rY   s     r-   r[   ztest_Pow.<locals>.<lambda>[   s    #..&8 r,   powPowuser_functionsz
x.dpowi(3)g	@z
x.pow(3.2))r'   r0   r   r   Halfr   r   r   r1   r    r   )rT   _cond_cfuncs     r-   test_Powrd   C   s{   QqS>[(((QUyD1@[@@@@@T!W+++QY9QV#4B
BBBBBQtAwY#5555QZ Iag$6L:LLLLLLQrT?l***RV	"d( 3C|CCCCCRX"5555QA&':555QT?j(((SV	)))QT?k)))QAY#6666QA&'+>>>>S&AaC.1AQ!SA1H--q!tax8989 9 94gqA8%CEKQT5+*>?<OOOQVUK,@A\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 y )NPIINFINITYNEG_INFINITYNANrK   E)	r'   r   r   r   InfinityNegativeInfinityNaNr   Exp1r+   r,   r-   test_constantsro   `   s    R=D   R=J&&&QZZ J...bS>^+++Q''(N:::QUUu$$$SV###QVV###r,   c                     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 y )NrS   z*const GoldenRatio: f64 = %s;
2*GoldenRatio   z"const Catalan: f64 = %s;
2*Catalanz(const EulerGamma: f64 = %s;
2*EulerGamma)r'   r	   evalfr   r
   r+   r,   r-   test_constants_otherrs   k   s    Q{]#'TWbWhWhikWl'llllgI?'--PRBSST T TQz\"&QT^TdTdegTh&hhhhr,   c                  b   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 y )NTtrueFfalsezx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y))r'   r   ru   rv   r0   r1   zr+   r,   r-   test_booleanrx   r   s   T?f$$$QVV&&&Uw&&&QWW(((QUx'''QUx'''aR=D   QUQY=000QUQY=000a!eq[!]222a!eq[!_444r,   c                  T    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kD  ft        t              t        dkD  f       t	        t
         fd       y )NrK   rS   Tz'if (x < 1) {
    x
} else {
    x + 2
}r	assign_toz,r = if (x < 1) {
    x
} else {
    x + 2
};)r|   inlinez$r = if (x < 1) { x } else { x + 2 };   )r}   z9if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 }z>r = if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 };zJr = if (x < 1) {
    x
} else if (x < 5) {
    x + 1
} else {
    x + 2
};z;2*if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 }r)   z@2*if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 } - 42r   c                      t               S rV   r&   exprs   r-   r[   z test_Piecewise.<locals>.<lambda>   s    y r,   )r   r0   r'   r   r   
ValueErrorr   s   @r-   test_Piecewiser      s   aQZ!a%/DT?   TS)	   TS6.0 0 0aQZ!a%Q!a%?DT$'CE E ETS6HJ J JTS)	   Y1q5zAE1q5>AE4=AADT$'EG G GY1q5zAE1q5>AE4=AABFDT$'JL L L aQZ!Q$AQQ@D
:./r,   c                  z    t         t        z   t        t              z   t        z   } t	        | t        g      dk(  sJ y )Ndereferencezx + y + (*z) + (*z).sin())r0   r1   r   rw   r'   r   s    r-   test_dereference_printingr      s0    q53q6>ADTs+/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 y )	Nzy*x.signum()rz   r{   zr = y*x.signum();r)   z(x + y).signum() + 42zr = (x + y).signum() + 42;zx.cos().signum())r   r0   r1   r'   r   r   s    r-   	test_signr      s    7Q;DT?n,,,TS)-@@@@A;DT?5555TS)-IIIIA<DT?0000r,   c                     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        y # 1 sw Y   y xY w)
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   )r0   r1   r   s      r-   test_reserved_wordsr      s~    6?DAqq6DT?k)))Ts+~===T>BWWWW	
	 0$$/0 0 0s   A55A>c                  \    t        t        dk  t        t              } t	        |       dk(  sJ y )NrK   z#if (x < 1) {
    y
} else {
    z
})r   r0   r1   rw   r'   r   s    r-   test_ITEr      s/    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 y )Nzn m oTintegerijkr0   zx[j]Az
A[m*i + j]BzB[m*o*i + o*j + k])r   r"   r!   r'   )	nmor   r   r   r0   r   r   s	            r-   test_Indexedr      s    gt,GAq!#qk3sA;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 y )Nzi mT)r   clsr0   r1   r{   z"for i in 0..m {
    y[i] = x[i];
})r   r   r!   r"   r'   )r   r   r0   r1   s       r-   test_dummy_loopsr      sY    5$E2DAqCACAAq	AQqTQqT*	  r,   c                  D   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 y )Nzm nTr   r   r0   r1   rw   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   r0   r1   rw   r   r   s           r-   
test_loopsr      s    5$'DAqCACACACACACAQq!tWQqT\QqT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 y )Nzn m o pTr   rJ   br1   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   prJ   r   r1   r   r   r   r   s              r-    test_loops_multiple_contractionsr   	  s    D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:SUVWXUXYZUZ]^_`]`U`cdUd	f		  r,   c            	         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 y )Nzm n o pTr   rJ   r   cr1   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   rJ   r   r   r1   r   r   r   r   codes                r-   test_loops_addfactorr   "  sm   D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PD EFaCE!GaPQcRSeOVWXYVYDY\]D]_`ab_bcd_def_fijklilmnin_nqrstqt_twx_xz{|}z}~z  CD  EF  CF  {F  IJ  {J	K		  r,   c                  &    t        t        d        y )Nc                  6    t        t        t              d      S )Ngarbage)method)r'   r   r0   r+   r,   r-   r[   ztest_settings.<locals>.<lambda>>  s    iAyA r,   )r   	TypeErrorr+   r,   r-   test_settingsr   =  s    
9ABr,   c            	         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 y )Nr0   rT   rS   z2*xz$const Catalan: f64 = %s;
2*x/Catalanrq   r   r   r   Tr   rK   r{   z8for i in 0..n {
    A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r    r   r'   r   rr   r!   r"   )r0   rT   r   r   s       r-   test_inline_functionr   A  s    AS&AaC.1AQqT?e###S&AaCK"89AQqT?/'--2CCE E E 	CACd+,AS&Aq1uIq1u,=">?AQqtW!-	  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 y )Nr0   Fr   r   Tceilc                     | j                    S rV   rW   r0   s    r-   r[   z%test_user_functions.<locals>.<lambda>X  s    q||+ r,   rI      c                     | j                   S rV   rW   r   s    r-   r[   z%test_user_functions.<locals>.<lambda>X  s
    ALL r,   rO   )r   r   r`   rN   zfabs(x)zabs(n))r   r'   r   r   )r0   r   custom_functionss      r-   test_user_functionsr   S  s    U#AT"A+VQ7:PRWYZ9[\ WQZ0@AZOOOSV,<=JJJSV,<=IIIr,   c                      t        t        g d            dk(  sJ t        t              5  t        t        g dg             d d d        y # 1 sw Y   y xY w)NrK   rS   r4   z	[1, 2, 3])r'   r%   r   r   r+   r,   r-   test_matrixr   _  sF    VI&';666	
	 '&)%&' ' 's   AAc                  z    t        t              5  t        t        g dg             d d d        y # 1 sw Y   y xY w)Nr   )r   NotImplementedErrorr'   r$   r+   r,   r-   test_sparse_matrixr   e  s/    	#	$ -,	{+,- - -s   1:N)H
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.rustr'   r0   r1   rw   r.   r2   r:   r<   rL   rP   rd   ro   rs   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r,   r-   <module>r      s   5 5 5 5 5* * *  ' 9 ) = = )
'
1a,
+:!'CR:$i5%0PK

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