a
    kh5                     @   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 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 d dl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'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d d	l.m/Z/ d d
l0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl,m6Z6 ed\Z7Z8Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBd d! ZCd"d# ZDd$d% ZEd&d' ZFd(d) ZGd*d+ ZHd,d- ZId.d/ ZJd0d1 ZKd2d3 ZLd4d5 ZMd6d7 ZNd8d9 ZOd:d; ZPd<d= ZQd>d? ZRd@dA ZSdBdC ZTdDdE ZUdFdG ZVdHdI ZWdJdK ZXdLdM ZYdNdO ZZdPS )Q    )SpiooSymbolsymbolsRationalIntegerGoldenRatio
EulerGammaCatalanLambdaDummy)	PiecewisesincosAbsexpceilingsqrtgammasignMaxMin	factorialbeta)EqGeGtLeLtNe)Range)ITE)For
aug_assign
Assignment)raises)RCodePrinter)implemented_function)IndexedBaseIdx)MatrixMatrixSymbol)rcodezx,y,zc                  C   s(   G dd dt } t| tdks$J 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abs(%s)r   )Z_printargs)selfprinter r1   M/var/www/auris/lib/python3.9/site-packages/sympy/printing/tests/test_rcode.py_rcode   s    z%test_printmethod.<locals>.fabs._rcodeN)__name__
__module____qualname__r3   r1   r1   r1   r2   fabs   s   r7   abs(x))r   r-   x)r7   r1   r1   r2   test_printmethod   s    r:   c                   C   s@   t ttdksJ t td dks(J t ttdks<J d S )Nzsqrt(x)      ?)r-   r   r9   r1   r1   r1   r2   test_rcode_sqrt   s    r<   c                  C   s   t td dksJ t ttd  dks,J tdttdt } t d| td ttt    td t  dkstJ t td	 d
ksJ t ttdd dksJ dd dfdd dfg}t td d|iddksJ t td d|iddksJ d S )N   zx^3zx^(y^3)g      g      @z(3.5*2*x)^(-x + y^x)/(x^2 + y)g      z1.0/xzx^(2.0/3.0)c                 S   s   |j S N
is_integerbaser   r1   r1   r2   <lambda>*       z test_rcode_Pow.<locals>.<lambda>Zdpowic                 S   s   |j  S rA   rB   rD   r1   r1   r2   rF   +   rG   powPowZuser_functionszdpowi(x, 3)g	@zpow(x, 3.2))r-   r9   yr(   r   r   )r>   Z_cond_cfuncr1   r1   r2   test_rcode_Pow"   s    *

rL   c                   C   s(   t tttt dddddks$J d S )NZmy_maxZmy_pow)r   rI   rJ   zmy_max(x, my_pow(x, 2)))r-   r   r9   r1   r1   r1   r2   test_rcode_Max0   s    rM   c                   C   sJ   t tddksJ t tdks$J t tdks4J t t dksFJ d S )Nr@   zexp(1)r   ZInfz-Inf)r-   r   r   r   r1   r1   r1   r2   test_rcode_constants_mathh5   s    rN   c                   C   s@   t dt dksJ t dt dks(J t dt dks<J d S )Nr?   z-GoldenRatio = 1.61803398874989;
2*GoldenRatioz&Catalan = 0.915965594177219;
2*Catalanz,EulerGamma = 0.577215664901533;
2*EulerGamma)r-   r	   r   r
   r1   r1   r1   r2   test_rcode_constants_other<   s    rO   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 )Nr=      z3.0/7.0   	   2iz-3.0/7.0zx + 3.0/7.0z(3.0/7.0)*x)r-   r   r9   r1   r1   r1   r2   test_rcode_RationalC   s    rU   c                   C   s,   t tddksJ t tddks(J d S )NC   Z67z-1)r-   r   r1   r1   r1   r2   test_rcode_IntegerL   s    rX   c                   C   s^   t tttt dksJ t tttt dks8J t ttttt	ttdksZJ d S )Nzsin(x)^cos(x)zfactorial(x) + gamma(y)zbeta(min(x, y), max(x, y)))
r-   r   r9   r   r   r   rK   r   r   r   r1   r1   r1   r2   test_rcode_functionsQ   s    rY   c                  C   s   t d} tdt| d|  }t|| dks0J tdt| d|  t }t|| dt  ksdJ td}tdt dd	d
}tdt| | d|   d|   }t||| || d}d}||ksJ d S )Nr9   r>   r?   z2*xzCatalan = %s;
2*x/CatalanAinTintegerr@   	assign_toz7for (i in 1:n){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r(   r   r-   r   r\   r)   r*   )r9   r>   rZ   r[   resrefr1   r1   r2   test_rcode_inline_functionW   s     
 rc   c                   C   s@   t ttdksJ t ttdks(J t ttdks<J d S )Nz
ceiling(x)r8   zgamma(x))r-   r   r9   r   r   r1   r1   r1   r2   test_rcode_exceptionsj   s    rd   c                  C   s   t ddd} t ddd}ddd d	fd
d dfgd}tt| |ddksNJ tt| |ddksfJ tt||ddks~J d S )Nr9   Fr]   r\   TZmyceilc                 S   s   | j  S rA   rB   r9   r1   r1   r2   rF   u   rG   z+test_rcode_user_functions.<locals>.<lambda>r7   c                 S   s   | j S rA   rB   re   r1   r1   r2   rF   u   rG   abs)r   r   rJ   z	myceil(x)zfabs(x)zabs(n))r   r-   r   r   )r9   r\   Zcustom_functionsr1   r1   r2   test_rcode_user_functionsp   s    rg   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x & yzx | yz!xz	x & y & zz	x | y | zz	z | x & yzz & (x | y))r-   r   truefalser9   rK   zr1   r1   r1   r2   test_rcode_boolean|   s    rm   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   r9   rK   r    r   r   r   r   r1   r1   r1   r2   test_rcode_Relational   s    rn   c                  C   s   t ttdk ftd df} t| }d}||ks2J td}t| |}d}||ksTJ dt ttdk ftd tdk ftd df } t| dksJ t| d	d
}|dksJ dt ttdk ftd tdk f } t| dksJ d S )Nr@   r?   Tzifelse(x < 1,x,x^2)tauztau = ifelse(x < 1,x,x^2);r=   z'2*ifelse(x < 1,x,ifelse(x < 2,x^2,x^3))cr_   z,c = 2*ifelse(x < 1,x,ifelse(x < 2,x^2,x^3));z&2*ifelse(x < 1,x,ifelse(x < 2,x^2,NA)))r   r9   r-   r   )exprra   rb   ro   r1   r1   r2   test_rcode_Piecewise   s    
,"rr   c                  C   s0   ddl m}  | t}t|}d}||ks,J d S )Nr   )sincz(ifelse(x != 0,sin(x)/x,1)))Z(sympy.functions.elementary.trigonometricrs   r9   r-   )rs   rq   ra   rb   r1   r1   r2   test_rcode_sinc   s
    rt   c                  C   s   t dtttdk ftd tdk ftd df } | dks<J tt t td  td  tdtdk fd tt d }t |} d}| |ksJ d	}t |d
d} | |ksJ d S )Nr?   r@   Tz)2*ifelse(x < 1,x,ifelse(x < 2,x + 1,x^2))r   r;   )r@   Tz4x^2 + x*y*z + y^2 + ifelse(x < 0.5,0,1) + cos(z) - 1z9c = x^2 + x*y*z + y^2 + ifelse(x < 0.5,0,1) + cos(z) - 1;rp   r_   )r-   r   r9   rK   rl   r   )prq   rb   r1   r1   r2   test_rcode_Piecewise_deep   s    0:rv   c                  C   s,   t tdk tt} t| }d}||ks(J d S )Nr@   zifelse(x < 1,y,z))r"   r9   rK   rl   r-   )rq   ru   rb   r1   r1   r2   test_rcode_ITE   s    rw   c                   C   s   t tdd  d S )Nc                   S   s   t ttddS )Ngarbage)method)r-   r   r9   r1   r1   r1   r2   rF      rG   z%test_rcode_settings.<locals>.<lambda>)r&   	TypeErrorr1   r1   r1   r2   test_rcode_settings   s    r{   c            
      C   s   t ddd\} }}td| td|td|  }}}t }t |_td| }||dks`J td	||f }||d
ksJ td|||f }	||	dksJ |jt ksJ d S )Nzn m oTr]   r[   jkr9   zx[j]rZ   zA[i, j]Bz
B[i, j, k])r   r*   r'   setZ_not_rr)   Z_print_Indexed)
r\   mor[   r|   r}   ru   r9   rZ   r~   r1   r1   r2   test_rcode_Indexed   s    "r   c                  C   s   d} t d| fd}t d| fd}t d| d fd}td| d }t|| ||d  ||  ||d  ||   }t|j|jdd	}|d
|d |d f ksJ d S )N   rK   )shaper9   Dyr@   r[   F)r`   Zcontractz&Dy[i] = (y[%s] - y[i])/(x[%s] - x[i]);)r)   r*   r   r-   rhslhs)Zlen_yrK   r9   r   r[   eZcode0r1   r1   r2   2test_rcode_Indexed_without_looking_for_contraction   s    2r   c            	      C   sp   t ddd\} }td}td}td}td|}td| }d	}t|||f ||  || d
}||kslJ d S )Nn mTr]   rZ   r9   rK   r[   r|   zjfor (i in 1:m){
   y[i] = 0;
}
for (i in 1:m){
   for (j in 1:n){
      y[i] = A[i, j]*x[j] + y[i];
   }
}r_   r   r)   r*   r-   )	r\   r   rZ   r9   rK   r[   r|   srp   r1   r1   r2   test_rcode_loops_matrix_vector   s    


 r   c                  C   sd   t ddtd\} }td}td}t| |} d| jj|jd }t||  ||  d}||ks`J d S )	Nzi mT)r^   clsr9   rK   zMfor (i_%(icount)i in 1:m_%(mcount)i){
   y[i_%(icount)i] = x[i_%(icount)i];
})ZicountZmcountr_   )r   r   r)   r*   labelZdummy_indexr-   )r[   r   r9   rK   expectedcoder1   r1   r2   test_dummy_loops   s    
r   c            
      C   s   t ddd\} }td}td}td}td}td|}td	| }d
}t|||f ||  ||  ||  || d}	|	|ksJ d S )Nr   Tr]   rZ   r9   rK   rl   r[   r|   ztfor (i in 1:m){
   y[i] = x[i] + z[i];
}
for (i in 1:m){
   for (j in 1:n){
      y[i] = A[i, j]*x[j] + y[i];
   }
}r_   r   )
r\   r   rZ   r9   rK   rl   r[   r|   r   rp   r1   r1   r2   test_rcode_loops_add
  s    


0r   c                  C   s   t ddd\} }}}td}td}td}td|}td| }td	|}	td
|}
d}t|||	|
f ||||	|
f  || d}||ksJ d S )Nn m o pTr]   abrK   r[   r|   r}   lzfor (i in 1:m){
   y[i] = 0;
}
for (i in 1:m){
   for (j in 1:n){
      for (k in 1:o){
         for (l in 1:p){
            y[i] = a[i, j, k, l]*b[j, k, l] + y[i];
         }
      }
   }
}r_   r   )r\   r   r   ru   r   r   rK   r[   r|   r}   r   r   rp   r1   r1   r2   &test_rcode_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|}d}t|||	|
|f |||	|
|f  ||	|
|f  || d}||ksJ d S )Nr   Tr]   r   r   rp   rK   r[   r|   r}   r   zfor (i in 1:m){
   y[i] = 0;
}
for (i in 1:m){
   for (j in 1:n){
      for (k in 1:o){
         for (l in 1:p){
            y[i] = (a[i, j, k, l] + b[i, j, k, l])*c[j, k, l] + y[i];
         }
      }
   }
}r_   r   )r\   r   r   ru   r   r   rp   rK   r[   r|   r}   r   r   r1   r1   r2   test_rcode_loops_addfactor=  s    



:r   c                  C   s  t ddd\} }}}td}td}td}td}td|}td	| }	td
|}
d}d}d}d}t||	 |||	f  ||
 |||
f   ||	 ||
  |||	|
f   || d}i }|| | |d d  |d< || | |d d  |d< || | |d d  |d< || | |d d  |d< || | |d d  |d< || | |d d  |d< ||d ks||d ks||d ks||d ks||d ks||d ksJ d S )Nr   Tr]   r   r   rp   rK   r[   r|   r}   zfor (i in 1:m){
   y[i] = 0;
}
zufor (i in 1:m){
   for (j in 1:n){
      for (k in 1:o){
         y[i] = b[j]*b[k]*c[i, j, k] + y[i];
      }
   }
}
zLfor (i in 1:m){
   for (k in 1:o){
      y[i] = a[i, k]*b[k] + y[i];
   }
}
zLfor (i in 1:m){
   for (j in 1:n){
      y[i] = a[i, j]*b[j] + y[i];
   }
}
r_   rW   r   r@   r?   r=      r   r   )r\   r   r   ru   r   r   rp   rK   r[   r|   r}   s0s1s2Zs3rb   r1   r1   r2   test_rcode_loops_multiple_termsZ  sJ    



J




r   c                  C   s.   t t tt t } t| tgddks*J d S )N)dereferencezx + y + (*z) + sin((*z)))r9   rK   r   rl   r-   )rq   r1   r1   r2   test_dereference_printing  s    r   c                  C   s$  t tt tdt tdkftdfttg} tddd}t| |}|dksNJ td|d  tdkf|d dft|d	  |d
  }t|}|dksJ tddd}tddd}t t|d	 dt|d g|d	 |d  |d dgd|d  |d	  t	|d
 d dgg}t||dks J d S )Nr?   r   TrZ   r=   r@   z8A[0] = x*y;
A[1] = ifelse(y > 0,x + 2,y);
A[2] = sin(z);)r?   r   )r@   r   r   r   z,ifelse(x > 0,2*A[2],A[2]) + sin(A[1]) + A[0]qr   M)r=   r   )r   r   r   zM[0] = sin(q[1]);
M[1] = 0;
M[2] = cos(q[2]);
M[3] = q[1] + q[2];
M[4] = q[3];
M[5] = 5;
M[6] = 2*q[4]/q[1];
M[7] = sqrt(q[0]) + 4;
M[8] = 0;)
r+   r9   rK   r   r   rl   r,   r-   r   r   )matrZ   ru   rq   r   r   r   r1   r1   r2   test_Matrix_printing  s$    ,
6$r   c                  C   s   t tt } t| dksJ t| d}|dks2J tt dt td  t td  }|dksbJ t tt} t| }|dksJ d S )Nz	y*sign(x)rl   zz = y*sign(x);r?   zx^2 + x*sign(x^2 + 2*x)zsign(cos(x)))r   r9   rK   r-   r   )rq   ru   r1   r1   r2   test_rcode_sgn  s    
$r   c                   C   s:   t tttt dksJ t ttdtt dks6J d S )Nz
x = y + z;+zx += y + z;)r-   r%   r9   rK   rl   r$   r1   r1   r1   r2   test_rcode_Assignment  s    r   c                  C   s6   t ttdddttdtg} t| }|dks2J d S )Nr   
   r?   *z.for(x in seq(from=0, to=9, by=2){
   y *= x;
})r#   r9   r!   r$   rK   r-   )fZsolr1   r1   r2   test_rcode_For  s    r   c                  C   sx   t ddd} t ddd}t ddd}t| d dks8J td| d  dksPJ |d || | }t|d	kstJ d S )
NrZ   r@   r=   r~   Cr   zA[0]z3*A[0]z
(A - B)[0])r,   r-   subs)rZ   r~   r   Fr1   r1   r2   test_MatrixElement_printing  s    r   N)[Z
sympy.corer   r   r   r   r   r   r   r	   r
   r   r   r   Zsympy.functionsr   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.core.relationalr   r   r   r   r   r    Z
sympy.setsr!   Zsympy.logicr"   Zsympy.codegenr#   r$   r%   Zsympy.testing.pytestr&   Zsympy.printing.rcoder'   Zsympy.utilities.lambdifyr(   Zsympy.tensorr)   r*   Zsympy.matricesr+   r,   r-   r9   rK   rl   r:   r<   rL   rM   rN   rO   rU   rX   rY   rc   rd   rg   rm   rn   rr   rt   rv   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   <module>   sZ   8< 		9