a
    kh.                     @   s  d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ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d\Z,Z-Z.eddd\Z/Z0Z1dd Z2dd Z3dd Z4dd Z5dd Z6dd Z7dd Z8dd Z9dd  Z:d!d" Z;d#d$ Z<d%d& Z=d'd( Z>d)d* Z?d+d, Z@d-d. ZAd/d0 ZBd1d2 ZCd3d4 ZDd5d6 ZEd7d8 ZFd9d: ZGd;d< ZHd=d> ZId?d@ ZJdAS )B    )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                   C   s,   t tddksJ t tddks(J d S )N*   Z42iz-56)r&   r    r+   r+   L/var/www/auris/lib/python3.9/site-packages/sympy/printing/tests/test_rust.pytest_Integer   s    r-   c                   C   s   t tttdksJ t tttdks,J t tttdksBJ t tttdksXJ t tttdksnJ t tttdksJ 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+   r+   r,   test_Relational   s    r0   c                   C   s   t tdddksJ t tdddks,J t tdddksBJ t td	ddksXJ t ttdd d
ksrJ t tddt dksJ 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   r.   r+   r+   r+   r,   test_Rational    s    r7   c                   C   s   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ksPJ t t dksbJ t dt dksvJ t td dksJ t tt d	ksJ 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&   r.   r/   nr+   r+   r+   r,   test_basic_ops)   s    r:   c                  C   sH   G dd dt } t| tdks$J tddd}t|d dksDJ d S )	Nc                   @   s   e Zd Zdd ZdS )ztest_printmethod.<locals>.fabsc                 S   s   d| | jd  S )Nz	%s.fabs()r   )Z_printargs)selfprinterr+   r+   r,   
_rust_code5   s    z)test_printmethod.<locals>.fabs._rust_codeN)__name__
__module____qualname__r>   r+   r+   r+   r,   fabs4   s   rB   zx.fabs()a   r1   )r   r   za[0])r   r&   r.   r"   )rB   rC   r+   r+   r,   test_printmethod3   s    rE   c                   C   sr   t tttt dksJ t ttdks0J t ttdksDJ t ttdksXJ t ttddksnJ d S )Nzx.sin().powf(x.cos())zx.abs()x.ceil()z	x.floor()r1   zx - 3.0*((1_f64/3.0)*x).floor())r&   r   r.   r   absr   r   r   r+   r+   r+   r,   test_Functions<   s
    rH   c                  C   sT  t dt dksJ t td t td   kr8dks>n J t ttdksRJ t ttj t td   krxdks~n J t dtt dksJ t ttj  t td   krdksn J t dt d	ksJ t td t td   krd	ksn J t td d
ksJ t ttdd dks6J t dt dksLJ t ttdksbJ t td dksxJ t ttd  dksJ t ttdd dksJ t	dt
tdt } t d| td ttt    td t  dksJ dd ddfdd ddfg}t td d|iddks2J t td d|iddksPJ d S ) NrD   z	x.recip()g      zx.sqrt()g      ?zx.sqrt().recip()g      z
PI.recip()zPI.sqrt().recip()r1   zx.cbrt()r8   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                 S   s   |j S N
is_integerbaser   r+   r+   r,   <lambda>]       ztest_Pow.<locals>.<lambda>Zdpowic                 S   s   |j  S rK   rL   rN   r+   r+   r,   rP   ^   rQ   powPowZuser_functionsz
x.dpowi(3)g	@z
x.pow(3.2))r&   r.   r   r   ZHalfr   r   r   r/   r   r   )rJ   Z_cond_cfuncr+   r+   r,   test_PowF   s0    *,.,*
rU   c                   C   s   t tdksJ t tdks J t tjdks2J t t dksDJ t tjdksVJ t tjdkshJ t tddks|J t tjdksJ d S )NPIINFINITYZNEG_INFINITYZNANrD   E)	r&   r   r   r   InfinityNegativeInfinityNaNr   ZExp1r+   r+   r+   r,   test_constantsc   s    r\   c                   C   s^   t dt dtd ksJ t dt dtd ks<J t dt dtd ksZJ d S )Nr8   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+   r+   r,   test_constants_othern   s    r_   c                   C   s   t ddksJ t tjdks"J t ddks2J t tjdksDJ t tt@ dksXJ t ttB dkslJ t t dks~J t tt@ t@ dksJ t ttB tB d	ksJ t tt@ tB d
ksJ t ttB t@ dksJ d S )NTtrueFfalsezk && mzk || mz!kzk && m && nzk || m || nzn || k && mzn && (k || m))r&   r   r`   ra   kmr9   r+   r+   r+   r,   test_booleanu   s    rd   c                      s  t ttdk ftd df t dks*J t dddks>J t dddd	ksTJ t ttdk ftd td
k ftd df t dddksJ t ddddksJ t dddksJ dt ttdk ftd td
k ftd df  t dddksJ dt ttdk ftd td
k ftd df d  t dddks@J t ttdk ftd tdkftttdkf tt fdd d S )NrD   r8   Tz+if (x < 1.0) {
    x
} else {
    x + 2.0
}r	assign_toz0r = if (x < 1.0) {
    x
} else {
    x + 2.0
};)rg   inlinez(r = if (x < 1.0) { x } else { x + 2.0 };   )rh   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                      s   t  S rK   r%   r+   exprr+   r,   rP      rQ   z test_Piecewise.<locals>.<lambda>)r   r.   r&   r   r   
ValueErrorr+   r+   rj   r,   test_Piecewise   s<    
(

,
0

,rm   c                  C   s.   t t tt t } t| tgddks*J d S )Ndereferencezx + y + (*z) + (*z).sin())r.   r/   r   zr&   rj   r+   r+   r,   test_dereference_printing   s    rq   c                  C   s   t tt } t| dksJ t| dddks0J t tt d } t| dksPJ t| dddksdJ t tt} t| dksJ d S )	Nz6y*(if (x == 0.0) { 0.0 } else { (x).signum() }) as f64re   rf   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   r.   r/   r&   r   rj   r+   r+   r,   	test_sign   s    rr   c                  C   s   t d\} }t|}t|dks$J t||gddks:J t|dddksNJ tt t|dd	 W d    n1 sx0    Y  d S )
Nzx ifz	if_.sin()rn   z(*if_).sin()Z_unreserved)Zreserved_word_suffixzif_unreserved.sin()T)Zerror_on_reserved)r   r   r&   r   rl   )r.   r/   rk   r+   r+   r,   test_reserved_words   s    
rs   c                  C   s$   t tdk tt} t| dks J d S )NrD   z#if (k < 1) {
    m
} else {
    n
})r   rb   rc   r9   r&   )Zekprr+   r+   r,   test_ITE   s    rt   c            	      C   s   t ddd\} }}td| td|td|  }}}td| }t|dksPJ td	||f }t|d
kspJ td|||f }t|dksJ d S )Nzn m oTr)   ijrb   r.   zx[j]Az
A[m*i + j]BzB[m*o*i + o*j + k])r   r!   r    r&   )	r9   rc   oru   rv   rb   r.   rw   rx   r+   r+   r,   test_Indexed   s    "rz   c                  C   sL   t ddtd\} }td}td}t| |} t||  ||  ddksHJ d S )Nzi mT)r'   clsr.   r/   rf   z"for i in 0..m {
    y[i] = x[i];
})r   r   r    r!   r&   )ru   rc   r.   r/   r+   r+   r,   test_dummy_loops   s    
r|   c                  C   s   t ddd\} }td}td}td}td}td| }td	|}t|||f ||  || d
dkslJ t|||f ||  ||  ||  || d
dksJ d S )Nzm nTr)   rw   r.   r/   rp   ru   rv   rf   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&   )rc   r9   rw   r.   r/   rp   ru   rv   r+   r+   r,   
test_loops   s    


.r~   c                  C   s   t ddd\} }}}td}td}td}td|}td| }td	|}	td
|}
t|||	|
f ||||	|
f  || dd||  | | || |  |	|  |
 || | |	|  |
 f d ksJ d S )Nzn m o pTr)   rC   br/   ru   rv   rb   lrf   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[%s]*b[%s] + y[i];
            }
        }
    }
}r}   )r9   rc   ry   prC   r   r/   ru   rv   rb   r   r+   r+   r,    test_loops_multiple_contractions  s    



(>r   c                  C   s  t ddd\} }}}td}td}td}td}td| }td	|}	td
|}
td|}t|||	|
|f |||	|
|f  ||	|
|f  || d}|d|| | | |	| |  |
|  | || | | |	| |  |
|  | |	| | |
|  | f d ksJ d S )Nzm n o pTr)   rC   r   cr/   ru   rv   rb   r   rf   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[%s] + b[%s])*c[%s] + y[i];
r   r}   )rc   r9   ry   r   rC   r   r   r/   ru   rv   rb   r   coder+   r+   r,   test_loops_addfactor%  s"    



:dr   c                   C   s   t tdd  d S )Nc                   S   s   t ttddS )Ngarbage)method)r&   r   r.   r+   r+   r+   r,   rP   A  rQ   ztest_settings.<locals>.<lambda>)r   	TypeErrorr+   r+   r+   r,   test_settings@  s    r   c                  C   s   t d} tdt| d|  }t|| dks0J tdt| d|  t }t|| dtd ksfJ td}tdt d	d
d}tdt| | d|   d|   }t||| || ddksJ d S )Nr.   rJ   r8   z2*xz&const Catalan: f64 = %s;
2.0*x/Catalanr]   rw   ru   r9   Tr)   rD   rf   z8for i in 0..n {
    A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r   r   r&   r
   r^   r    r!   )r.   rJ   rw   ru   r+   r+   r,   test_inline_functionD  s    
 r   c                  C   s   t ddd} t ddd}ddd d	d
fdd dd
fgd}tt| |ddksRJ tt| |ddksjJ tt||ddksJ d S )Nr.   Fr)   r9   Tceilc                 S   s   | j  S rK   rL   r.   r+   r+   r,   rP   [  rQ   z%test_user_functions.<locals>.<lambda>rB      c                 S   s   | j S rK   rL   r   r+   r+   r,   rP   [  rQ   rG   )r   r   rT   rF   zfabs(x)zabs(n))r   r&   r   r   )r.   r9   Zcustom_functionsr+   r+   r,   test_user_functionsV  s    r   c                   C   sV   t tg ddksJ tt" t tg dg W d    n1 sH0    Y  d S )NrD   r8   r1   z	[1, 2, 3])r&   r$   r   rl   r+   r+   r+   r,   test_matrixb  s    
r   c                   C   s>   t t" ttg dg W d    n1 s00    Y  d S )Nr   )r   NotImplementedErrorr&   r#   r+   r+   r+   r,   test_sparse_matrixh  s    
r   N)KZ
sympy.corer   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Zsympy.functionsr   r   r   r   r   r   r   r   r   Zsympy.logicr   Zsympy.testing.pytestr   Zsympy.utilities.lambdifyr   Zsympy.tensorr    r!   Zsympy.matricesr"   r#   r$   Zsympy.printing.codeprinterr&   r.   r/   rp   rb   rc   r9   r-   r0   r7   r:   rE   rH   rU   r\   r_   rd   rm   rq   rr   rs   rt   rz   r|   r~   r   r   r   r   r   r   r   r+   r+   r+   r,   <module>   sD   P,		
	
(
