o
    oh5                     @   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   )_printargs)selfprinter r2   s/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/printing/tests/test_rcode.py_rcode   s   z%test_printmethod.<locals>.fabs._rcodeN)__name__
__module____qualname__r4   r2   r2   r2   r3   fabs   s    r8   abs(x))r   r-   x)r8   r2   r2   r3   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   r:   r2   r2   r2   r3   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   r2   r2   r3   <lambda>*       z test_rcode_Pow.<locals>.<lambda>dpowic                 S   s   |j  S rC   rD   rF   r2   r2   r3   rH   +       powPowuser_functionszdpowi(x, 3)g	@zpow(x, 3.2))r-   r:   yr(   r   r   )r@   _cond_cfuncr2   r2   r3   test_rcode_Pow"   s   *

 rR   c                   C   s(   t tttt dddddksJ d S )Nmy_maxmy_pow)r   rM   rN   zmy_max(x, my_pow(x, 2)))r-   r   r:   r2   r2   r2   r3   test_rcode_Max0   s   (rU   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 )NrB   zexp(1)r   Infz-Inf)r-   r   r   r   r2   r2   r2   r3   test_rcode_constants_mathh5   s   rW   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 )NrA   z-GoldenRatio = 1.61803398874989;
2*GoldenRatioz&Catalan = 0.915965594177219;
2*Catalanz,EulerGamma = 0.577215664901533;
2*EulerGamma)r-   r	   r   r
   r2   r2   r2   r3   test_rcode_constants_other<   s   rX   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   r:   r2   r2   r2   r3   test_rcode_RationalC   s   r^   c                   C   s,   t tddks
J t tddksJ d S )NC   67z-1)r-   r   r2   r2   r2   r3   test_rcode_IntegerL   s   rb   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   r:   r   r   r   rP   r   r   r   r2   r2   r2   r3   test_rcode_functionsQ   s   &rc   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 )Nr:   r@   rA   z2*xzCatalan = %s;
2*x/CatalanAinTintegerrB   	assign_toz7for (i in 1:n){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r(   r   r-   r   rf   r)   r*   )r:   r@   rd   re   resrefr2   r2   r3   test_rcode_inline_functionW   s    
 rm   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)r9   zgamma(x))r-   r   r:   r   r   r2   r2   r2   r3   test_rcode_exceptionsj   r>   rn   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 )Nr:   Frg   rf   Tmyceilc                 S   s   | j  S rC   rD   r:   r2   r2   r3   rH   u   rK   z+test_rcode_user_functions.<locals>.<lambda>r8   c                 S   s   | j S rC   rD   rp   r2   r2   r3   rH   u   rI   abs)r   r   rN   z	myceil(x)zfabs(x)zabs(n))r   r-   r   r   )r:   rf   custom_functionsr2   r2   r3   test_rcode_user_functionsp   s   rs   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falser:   rP   zr2   r2   r2   r3   test_rcode_boolean|   s   ry   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   r:   rP   r    r   r   r   r   r2   r2   r2   r3   test_rcode_Relational   s   rz   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 )NrB   rA   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))cri   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   r:   r-   r   )exprrk   rl   r{   r2   r2   r3   test_rcode_Piecewise   s   
,"r~   c                  C   s0   ddl m}  | t}t|}d}||ksJ d S )Nr   )sincz(ifelse(x != 0,sin(x)/x,1)))(sympy.functions.elementary.trigonometricr   r:   r-   )r   r}   rk   rl   r2   r2   r3   test_rcode_sinc   s
   r   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 )NrA   rB   Tz)2*ifelse(x < 1,x,ifelse(x < 2,x + 1,x^2))r   r<   )rB   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;r|   ri   )r-   r   r:   rP   rx   r   )pr}   rl   r2   r2   r3   test_rcode_Piecewise_deep   s   0:r   c                  C   s,   t tdk tt} t| }d}||ksJ d S )NrB   zifelse(x < 1,y,z))r"   r:   rP   rx   r-   )r}   r   rl   r2   r2   r3   test_rcode_ITE   s   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:   r2   r2   r2   r3   rH      s    z%test_rcode_settings.<locals>.<lambda>)r&   	TypeErrorr2   r2   r2   r3   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 oTrg   re   jkr:   zx[j]rd   zA[i, j]Bz
B[i, j, k])r   r*   r'   set_not_rr)   _print_Indexed)
rf   more   r   r   r   r:   rd   r   r2   r2   r3   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   rP   )shaper:   DyrB   re   F)rj   contractz&Dy[i] = (y[%s] - y[i])/(x[%s] - x[i]);)r)   r*   r   r-   rhslhs)len_yrP   r:   r   re   ecode0r2   r2   r3   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 mTrg   rd   r:   rP   re   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];
   }
}ri   r   r)   r*   r-   )	rf   r   rd   r:   rP   re   r   sr|   r2   r2   r3   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)rh   clsr:   rP   zMfor (i_%(icount)i in 1:m_%(mcount)i){
   y[i_%(icount)i] = x[i_%(icount)i];
})icountmcountri   )r   r   r)   r*   labeldummy_indexr-   )re   r   r:   rP   expectedcoder2   r2   r3   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   Trg   rd   r:   rP   rx   re   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];
   }
}ri   r   )
rf   r   rd   r:   rP   rx   re   r   r   r|   r2   r2   r3   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 pTrg   abrP   re   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];
         }
      }
   }
}ri   r   )rf   r   r   r   r   r   rP   re   r   r   r   r   r|   r2   r2   r3   &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   Trg   r   r   r|   rP   re   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];
         }
      }
   }
}ri   r   )rf   r   r   r   r   r   r|   rP   re   r   r   r   r   r2   r2   r3   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   Trg   r   r   r|   rP   re   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];
   }
}
ri   ra   r   rB   rA   r?      r   r   )rf   r   r   r   r   r   r|   rP   re   r   r   s0s1s2s3rl   r2   r2   r3   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)))r:   rP   r   rx   r-   )r}   r2   r2   r3   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 )NrA   r   Trd   r?   rB   z8A[0] = x*y;
A[1] = ifelse(y > 0,x + 2,y);
A[2] = sin(z);)rA   r   )rB   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+   r:   rP   r   r   rx   r,   r-   r   r   )matrd   r   r}   r   r   r   r2   r2   r3   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)rx   zz = y*sign(x);rA   zx^2 + x*sign(x^2 + 2*x)zsign(cos(x)))r   r:   rP   r-   r   )r}   r   r2   r2   r3   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%   r:   rP   rx   r$   r2   r2   r2   r3   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   
   rA   *z.for(x in seq(from=0, to=9, by=2){
   y *= x;
})r#   r:   r!   r$   rP   r-   )fsolr2   r2   r3   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 )
Nrd   rB   r?   r   Cr   zA[0]z3*A[0]z
(A - B)[0])r,   r-   subs)rd   r   r   Fr2   r2   r3   test_MatrixElement_printing  s   r   N)[
sympy.corer   r   r   r   r   r   r   r	   r
   r   r   r   sympy.functionsr   r   r   r   r   r   r   r   r   r   r   r   r   sympy.core.relationalr   r   r   r   r   r    
sympy.setsr!   sympy.logicr"   sympy.codegenr#   r$   r%   sympy.testing.pytestr&   sympy.printing.rcoder'   sympy.utilities.lambdifyr(   sympy.tensorr)   r*   sympy.matricesr+   r,   r-   r:   rP   rx   r;   r=   rR   rU   rW   rX   r^   rb   rc   rm   rn   rs   ry   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   <module>   s\   8 < 		9