o
    GZh5                     @   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   N/var/www/auris/lib/python3.10/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      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s:J t td	 d
ksDJ t ttdd dksQJ dd dfdd dfg}t td d|iddkskJ t td d|iddksyJ 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 rB   rC   rE   r1   r1   r2   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   *

 rN   c                   C   s(   t tttt dddddksJ d S )NZmy_maxZmy_pow)r   rK   rL   zmy_max(x, my_pow(x, 2)))r-   r   r9   r1   r1   r1   r2   test_rcode_Max0   s   (rO   c                   C   sJ   t tddks
J t tdksJ t tdksJ t t dks#J d S )NrA   zexp(1)r   ZInfz-Inf)r-   r   r   r   r1   r1   r1   r2   test_rcode_constants_mathh5   s   rP   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   rQ   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s!J t td	ddks,J t ttdd d
ks9J t tddt dksFJ 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   rW   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   rZ   c                   C   s^   t tttt dksJ t tttt dksJ t ttttt	ttdks-J 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   rM   r   r   r   r1   r1   r1   r2   test_rcode_functionsQ   s   &r[   c                  C   s   t d} tdt| d|  }t|| dksJ tdt| d|  t }t|| dt  ks2J td}tdt dd	d
}tdt| | d|   d|   }t||| || d}d}||kscJ d S )Nr9   r?   r@   z2*xzCatalan = %s;
2*x/CatalanAinTintegerrA   	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?   r\   r]   resrefr1   r1   r2   test_rcode_inline_functionW   s    
 re   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   r=   rf   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s'J tt| |ddks3J tt||ddks?J d S )Nr9   Fr_   r^   TZmyceilc                 S   s   | j  S rB   rC   r9   r1   r1   r2   rG   u   rI   z+test_rcode_user_functions.<locals>.<lambda>r7   c                 S   s   | j S rB   rC   rg   r1   r1   r2   rG   u   rH   abs)r   r   rL   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   ri   c                   C   s   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@ dks,J t ttB dks6J t t dks?J t tt@ t@ dksKJ t ttB tB d	ksWJ t tt@ tB d
kscJ t ttB t@ dksoJ 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   rM   zr1   r1   r1   r2   test_rcode_boolean|   s   ro   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s!J t tttdks,J t tttdks7J t tttdksBJ d S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	r-   r   r9   rM   r    r   r   r   r   r1   r1   r1   r2   test_rcode_Relational   s   rp   c                  C   s   t ttdk ftd df} t| }d}||ksJ td}t| |}d}||ks*J dt ttdk ftd tdk ftd df } t| dksHJ t| d	d
}|dksTJ dt ttdk ftd tdk f } t| dksmJ d S )NrA   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))cra   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   )exprrc   rd   rq   r1   r1   r2   test_rcode_Piecewise   s   
,"rt   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.trigonometricru   r9   r-   )ru   rs   rc   rd   r1   r1   r2   test_rcode_sinc   s
   rv   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sGJ d	}t |d
d} | |ksUJ d S )Nr@   rA   Tz)2*ifelse(x < 1,x,ifelse(x < 2,x + 1,x^2))r   r;   )rA   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;rr   ra   )r-   r   r9   rM   rn   r   )prs   rd   r1   r1   r2   test_rcode_Piecewise_deep   s   0:rx   c                  C   s,   t tdk tt} t| }d}||ksJ d S )NrA   zifelse(x < 1,y,z))r"   r9   rM   rn   r-   )rs   rw   rd   r1   r1   r2   test_rcode_ITE   s   ry   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   rG      s    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s0J td	||f }||d
ksAJ td|||f }	||	dksSJ |jt ks[J d S )Nzn m oTr_   r]   jkr9   zx[j]r\   zA[i, j]Bz
B[i, j, k])r   r*   r'   setZ_not_rr)   Z_print_Indexed)
r^   mor]   r~   r   rw   r9   r\   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sPJ d S )N   rM   )shaper9   DyrA   r]   F)rb   Zcontractz&Dy[i] = (y[%s] - y[i])/(x[%s] - x[i]);)r)   r*   r   r-   rhslhs)Zlen_yrM   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s6J d S )Nn mTr_   r\   r9   rM   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];
   }
}ra   r   r)   r*   r-   )	r^   r   r\   r9   rM   r]   r~   srr   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s0J d S )	Nzi mT)r`   clsr9   rM   zMfor (i_%(icount)i in 1:m_%(mcount)i){
   y[i_%(icount)i] = x[i_%(icount)i];
})ZicountZmcountra   )r   r   r)   r*   labelZdummy_indexr-   )r]   r   r9   rM   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sBJ d S )Nr   Tr_   r\   r9   rM   rn   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];
   }
}ra   r   )
r^   r   r\   r9   rM   rn   r]   r~   r   rr   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sGJ d S )Nn m o pTr_   abrM   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];
         }
      }
   }
}ra   r   )r^   r   r   rw   r   r   rM   r]   r~   r   r   r   rr   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sSJ d S )Nr   Tr_   r   r   rr   rM   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];
         }
      }
   }
}ra   r   )r^   r   r   rw   r   r   rr   rM   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 d S d S d S d S d S )Nr   Tr_   r   r   rr   rM   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];
   }
}
ra   rY   r   rA   r@   r>      r   r   )r^   r   r   rw   r   r   rr   rM   r]   r~   r   s0s1s2Zs3rd   r1   r1   r2   test_rcode_loops_multiple_termsZ  sL   



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   rM   r   rn   r-   )rs   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s'J td|d  tdkf|d dft|d	  |d
  }t|}|dksLJ 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sJ d S )Nr@   r   Tr\   r>   rA   z8A[0] = x*y;
A[1] = ifelse(y > 0,x + 2,y);
A[2] = sin(z);)r@   r   )rA   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   rM   r   r   rn   r,   r-   r   r   )matr\   rw   rs   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sJ tt dt td  t td  }|dks1J t tt} t| }|dksAJ d S )Nz	y*sign(x)rn   zz = y*sign(x);r@   zx^2 + x*sign(x^2 + 2*x)zsign(cos(x)))r   r9   rM   r-   r   )rs   rw   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sJ d S )Nz
x = y + z;+zx += y + z;)r-   r%   r9   rM   rn   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sJ d S )Nr   
   r@   *z.for(x in seq(from=0, to=9, by=2){
   y *= x;
})r#   r9   r!   r$   rM   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sJ td| d  dks(J |d || | }t|d	ks:J d S )
Nr\   rA   r>   r   Cr   zA[0]z3*A[0]z
(A - B)[0])r,   r-   subs)r\   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   rM   rn   r:   r<   rN   rO   rP   rQ   rW   rZ   r[   re   rf   ri   ro   rp   rt   rv   rx   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   <module>   s\   8 < 		9