
    sg5                        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 Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKd  ZLd! ZMd" ZNd# ZOd$ ZPd% ZQd& ZRd' ZSd( ZTd) ZUd* ZVd+ ZWd, ZXd- ZYd. ZZy/)0    )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                  V     G d dt               } t         | t                    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abs(%s)r   )_printargs)selfprinters     R/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_rcode.py_rcodez%test_printmethod.<locals>.fabs._rcode   s    w~~diil;;;    N)__name__
__module____qualname__r8    r9   r7   fabsr1      s    	<r9   r>   abs(x))r   r.   x)r>   s    r7   test_printmethodrA      s&    <s < a>X%%%r9   c                      t        t        t                    dk(  sJ t        t        dz        dk(  sJ t        t        t                    dk(  sJ y )Nzsqrt(x)      ?)r.   r   r@   r=   r9   r7   test_rcode_sqrtrD      sD    a>Y&&&C=I%%%a>Y&&&r9   c                  ,   t        t        dz        dk(  sJ t        t        t        dz  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 t        t        d	z        d
k(  sJ t        t        t        dd      z        dk(  sJ d df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 )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                     |j                   S N
is_integerbaser   s     r7   <lambda>z test_rcode_Pow.<locals>.<lambda>*   s
    cnn r9   dpowic                     |j                    S rK   rL   rN   s     r7   rP   z test_rcode_Pow.<locals>.<lambda>+   s    #..&8 r9   powPowuser_functionszdpowi(x, 3)g	@zpow(x, 3.2))r.   r@   yr)   r   r   )rG   _cond_cfuncs     r7   test_rcode_PowrY   "   s   A;%QTy(((S&AaC.1AAaDHAqD))1a4!845() ) )D>W$$$HQN"#}4444g>8%@BKAuk&:;}LLLC(<=NNNr9   c                  `    t        t        t        t        t        z        ddd      dk(  sJ y )Nmy_maxmy_pow)r   rT   rU   zmy_max(x, my_pow(x, 2)))r.   r   r@   r=   r9   r7   test_rcode_Maxr]   0   s'    Qqs((+KLPiiiir9   c                      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 y )NrI   zexp(1)r   Infz-Inf)r.   r   r   r   r=   r9   r7   test_rcode_constants_mathhr`   5   sP    Q=H$$$99":r9   c                      t        dt        z        dk(  sJ t        dt        z        dk(  sJ t        dt        z        dk(  sJ y )NrH   z-GoldenRatio = 1.61803398874989;
2*GoldenRatioz&Catalan = 0.915965594177219;
2*Catalanz,EulerGamma = 0.577215664901533;
2*EulerGamma)r.   r
   r   r   r=   r9   r7   test_rcode_constants_otherrb   <   sV    ;#SSSS	'	?@ @ @:"QQQQr9   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 )NrF      z3.0/7.0   	   2iz-3.0/7.0zx + 3.0/7.0z(3.0/7.0)*x)r.   r   r@   r=   r9   r7   test_rcode_Rationalri   C   s    !Q I---"a!S(((!R!Z///"b!"i///Xa^#$555!Q!"m333r9   c                  h    t        t        d            dk(  sJ t        t        d            dk(  sJ y )NC   67z-1)r.   r	   r=   r9   r7   test_rcode_Integerrn   L   s0    %%%%%%r9   c            	      4   t        t        t              t        t              z        dk(  sJ t        t	        t              t        t              z         dk(  sJ t        t        t        t        t              t        t        t                          dk(  sJ y )Nzsin(x)^cos(x)zfactorial(x) + gamma(y)zbeta(min(x, y), max(x, y)))
r.   r   r@   r   r   r   rW   r   r   r   r=   r9   r7   test_rcode_functionsrp   Q   sj    Q3q6!"o5551a()-FFFFc!QiQ+,0LLLLr9   c            	         t        d      } t        dt        | d| z              }t         ||             dk(  sJ t        dt        | d| z  t        z              }t         ||             dt	        j
                         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 )Nr@   rG   rH   z2*xzCatalan = %s;
2*x/CatalanAinTintegerrI   	assign_toz7for (i in 1:n){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r)   r   r.   r   rt   r*   r+   )r@   rG   rr   rs   resrefs         r7   test_rcode_inline_functionr{   W   s    AS&AaC.1A1;%S&AaCK"89A	!-		;< < <CACd+,AS&Aq1uIq1u,=">?Aa!g1&C	 
 #::r9   c                      t        t        t                    dk(  sJ t        t        t                    dk(  sJ t        t	        t                    dk(  sJ y )Nz
ceiling(x)r?   zgamma(x))r.   r   r@   r   r   r=   r9   r7   test_rcode_exceptionsr}   j   sE    ,,,Q=H$$$q?j(((r9   c                      t        dd      } t        dd      }dd dfd	 d
fgd}t        t        |       |      dk(  sJ t        t        |       |      dk(  sJ t        t        |      |      dk(  sJ y )Nr@   Fru   rt   Tmyceilc                     | j                    S rK   rL   r@   s    r7   rP   z+test_rcode_user_functions.<locals>.<lambda>u   s    q||+ r9   r>   c                     | j                   S rK   rL   r   s    r7   rP   z+test_rcode_user_functions.<locals>.<lambda>u   s
     r9   abs)r   r   rU   z	myceil(x)zfabs(x)zabs(n))r   r.   r   r   )r@   rt   custom_functionss      r7   test_rcode_user_functionsr   p   s    U#AT"A+V47Mu6UV ,<=LLLQ(89YFFFQ(89XEEEr9   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   truefalser@   rW   zr=   r9   r7   test_rcode_booleanr   |   s    ;&   =F"""<7""">W$$$Q<7"""Q<7"""!9Q{***Q{***!a%1,,,!a%1...r9   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   r@   rW   r!   r   r    r   r   r=   r9   r7   test_rcode_Relationalr      s    Aq?h&&&Aq?h&&&Aq?h&&&Aq?g%%%Aq?g%%%Aq?h&&&r9   c                     t        t        t        dk  ft        dz  df      } t        |       }d}||k(  sJ t        d      }t        | |      }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k(  sJ t        | d	
      }|dk(  sJ dt        t        t        dk  ft        dz  t        dk  f      z  } t        |       dk(  sJ y )NrI   rH   Tzifelse(x < 1,x,x^2)tauztau = ifelse(x < 1,x,x^2);rF   z'2*ifelse(x < 1,x,ifelse(x < 2,x^2,x^3))crw   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   )exprry   rz   r   s       r7   test_rcode_Piecewiser      s    aQZ!Q$.DdCC#::uCd3C$C#::Y1q5zAqD!A#;Ad<<D;CCCC

$C@@@@
 Y1q5zAqD!A#;//D;B
BB
Br9   c                  P    ddl m}   | t              }t        |      }d}||k(  sJ y )Nr   )sincz(ifelse(x != 0,sin(x)/x,1)))(sympy.functions.elementary.trigonometricr   r@   r.   )r   r   ry   rz   s       r7   test_rcode_sincr      s(    =7D
+C
'C#::r9   c            	         t        dt        t        t        dk  ft        dz   t        dk  ft        dz  df      z        } | dk(  sJ t        t        z  t        z  t        dz  z   t        dz  z   t        dt        dk  fd      z   t        t              z   dz
  }t        |      } d}| |k(  sJ d	}t        |d
      } | |k(  sJ y )NrH   rI   Tz)2*ifelse(x < 1,x,ifelse(x < 2,x + 1,x^2))r   rC   )rI   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   rw   )r.   r   r@   rW   r   r   )pr   rz   s      r7   test_rcode_Piecewise_deepr      s    a	1a!e*q1ua!enq!tTlCCDA;;;;Q3q51a4<!Q$Aq3w<!CCc!fLqPDdA>C8O8CCdc"A8O8r9   c                  d    t        t        dk  t        t              } t	        |       }d}||k(  sJ y )NrI   zifelse(x < 1,y,z))r#   r@   rW   r   r.   )r   r   rz   s      r7   test_rcode_ITEr      s-    q1uaDdAC8O8r9   c                  &    t        t        d        y )Nc                  6    t        t        t              d      S )Ngarbage)method)r.   r   r@   r=   r9   r7   rP   z%test_rcode_settings.<locals>.<lambda>   s    eCF9= r9   )r'   	TypeErrorr=   r9   r7   test_rcode_settingsr      s    
9=>r9   c                     t        dd      \  } }}t        d|       t        d|      t        d|      }}}t               }t               |_        t        d      |   }|j                  |      dk(  sJ t        d	      ||f   }|j                  |      d
k(  sJ t        d      |||f   }	|j                  |	      dk(  sJ |j                  t               k(  sJ y )Nzn m oTru   rs   jkr@   zx[j]rr   zA[i, j]Bz
B[i, j, k])r   r+   r(   set_not_rr*   _print_Indexed)
rt   mors   r   r   r   r@   rr   r   s
             r7   test_rcode_Indexedr      s    gt,GAq!#qk3sA;C!qAAuAHCAA&(((CAAA)+++CAq!AA,...88sur9   c                  @   d} t        d| f      }t        d| f      }t        d| dz
  f      }t        d| dz
        }t        ||   ||dz      ||   z
  ||dz      ||   z
  z        }t        |j                  |j
                  d	      }|d
|dz   d|dz   dk(  sJ y )N   rW   )shaper@   DyrI   rs   F)rx   contractzDy[i] = (y[z] - y[i])/(x[z
] - x[i]);)r*   r+   r   r.   rhslhs)len_yrW   r@   r   rs   ecode0s          r7   2test_rcode_Indexed_without_looking_for_contractionr      s    ECx(ACx(A	T%'	,BCqAA1Q3!q1vad{+,A!%%15559EAq1uMMMMr9   c                      t        dd      \  } }t        d      }t        d      }t        d      }t        d|      }t        d|       }d	}t        |||f   ||   z  ||   
      }||k(  sJ y )Nn mTru   rr   r@   rW   rs   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];
   }
}rw   r   r*   r+   r.   )	rt   r   rr   r@   rW   rs   r   sr   s	            r7   test_rcode_loops_matrix_vectorr      s}    5$'DAqCACACACACA	  	a1gadlad+A6M6r9   c                      t        ddt              \  } }t        d      }t        d      }t        | |      } d| j                  j
                  |j
                  dz  }t        ||    ||          }||k(  sJ y )	Nzi mT)rv   clsr@   rW   zMfor (i_%(icount)i in 1:m_%(mcount)i){
   y[i_%(icount)i] = x[i_%(icount)i];
})icountmcountrw   )r   r   r*   r+   labeldummy_indexr.   )rs   r   r@   rW   expectedcodes         r7   test_dummy_loopsr      s~     5$E2DAqCACAAq	A 77&&!--@	AH
 11&D8r9   c                     t        dd      \  } }t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }d
}t        |||f   ||   z  ||   z   ||   z   ||         }	|	|k(  sJ y )Nr   Tru   rr   r@   rW   r   rs   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];
   }
}rw   r   )
rt   r   rr   r@   rW   r   rs   r   r   r   s
             r7   test_rcode_loops_addr   
  s    5$'DAqCACACACACACA	  	a1gadlQqT!AaD(AaD9A6M6r9   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d|      }t        d|       }t        d	|      }	t        d
|      }
d}t        |||	|
f   ||||	|
f   z  ||         }||k(  sJ y )Nn m o pTru   abrW   rs   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];
         }
      }
   }
}rw   r   )rt   r   r   r   r   r   rW   rs   r   r   r   r   r   s                r7   &test_rcode_loops_multiple_contractionsr   !  s    D1JAq!QCACACACACACACA	  	a1aj1aA:&!A$7A6M6r9   c                  F   t        dd      \  } }}}t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }	t        d
|      }
t        d|      }d}t        |||	|
|f   |||	|
|f   z   ||	|
|f   z  ||         }||k(  sJ y )Nr   Tru   r   r   r   rW   rs   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];
         }
      }
   }
}rw   r   )rt   r   r   r   r   r   r   rW   rs   r   r   r   r   s                r7   test_rcode_loops_addfactorr   =  s    D1JAq!QCACACACACACACACA	  	qAq!}qAq!},a1aj8AaDIA6M6r9   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }	t        d
|      }
d}d}d}d}t        ||	   |||	f   z  ||
   |||
f   z  z   ||	   ||
   z  |||	|
f   z  z   ||         }i }||z   |z   |d d z   |d<   ||z   |z   |d d z   |d<   ||z   |z   |d d z   |d<   ||z   |z   |d d z   |d<   ||z   |z   |d d z   |d<   ||z   |z   |d d z   |d<   ||d   k(  s/||d   k(  s&||d   k(  s||d   k(  s||d   k(  s||d   k(  sJ y y y y y y )Nr   Tru   r   r   r   rW   rs   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];
   }
}
rw   rm   r   rI   rH   rF      r   r   )rt   r   r   r   r   r   r   rW   rs   r   r   s0s1s2s3rz   s                   r7   test_rcode_loops_multiple_termsr   Z  s   D1JAq!QCACACACACACACA	 	 	 	  		!Qq!tWqtAadG|#ad1Q4i!Q'
&::ad	LA 	C"Wr\BsG#CF"Wr\BsG#CF"Wr\BsG#CF"Wr\BsG#CF"Wr\BsG#CF"Wr\BsG#CFQKQKQKQKQKQK 
      r9   c                  z    t         t        z   t        t              z   t        z   } t	        | t        g      dk(  sJ y )N)dereferencezx + y + (*z) + sin((*z)))r@   rW   r   r   r.   )r   s    r7   test_dereference_printingr     s0    q53q6>ADA3'+EEEEr9   c            	      `   t        t        t        z  t        dt        z   t        dkD  ft        df      t	        t
              g      } t        ddd      }t        | |      }|dk(  sJ t        d|d   z  t        dkD  f|d   df      t	        |d	         z   |d
   z   }t        |      }|dk(  sJ t        ddd      }t        ddd      }t        t	        |d	         dt        |d         g|d	   |d   z   |d   dgd|d   z  |d	   z  t        |d
         dz   dgg      }t        ||      dk(  sJ y )NrH   r   Trr   rF   rI   z8A[0] = x*y;
A[1] = ifelse(y > 0,x + 2,y);
A[2] = sin(z);)rH   r   )rI   r   r   r   z,ifelse(x > 0,2*A[2],A[2]) + sin(A[1]) + A[0]qr   M)rF   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@   rW   r   r   r   r-   r.   r   r   )matrr   r   r   r   r   r   s          r7   test_Matrix_printingr     s\   
!A#y!a%14y93q6B
CCS!QAc1A	  
 a$iQ'!D'49C$LH1T7RDdA@AAAS!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<!+Q/1 	2A A;		 	 	r9   c                  D   t        t              t        z  } t        |       dk(  sJ t        | d      }|dk(  sJ t        t        dt        z  t        dz  z         t        z  t        dz  z         }|dk(  sJ t        t	        t                    } t        |       }|dk(  sJ y )Nz	y*sign(x)r   zz = y*sign(x);rH   zx^2 + x*sign(x^2 + 2*x)zsign(cos(x)))r   r@   rW   r.   r   )r   r   s     r7   test_rcode_sgnr     s    7Q;D;+%%%dCA!!!!d1q51a4< 1$q!t+,A****A<DdAr9   c                      t        t        t        t        t        z               dk(  sJ t        t        t        dt        t        z               dk(  sJ y )Nz
x = y + z;+zx += y + z;)r.   r&   r@   rW   r   r%   r=   r9   r7   test_rcode_Assignmentr     s@    Aq1u%&,666AsAE*+}<<<r9   c            	          t        t        t        ddd      t        t        dt              g      } t        |       }|dk(  sJ y )Nr   
   rH   *z.for(x in seq(from=0, to=9, by=2){
   y *= x;
})r$   r@   r"   r%   rW   r.   )fsols     r7   test_rcode_Forr     sD    AuQAAsA!6 78A
(C    r9   c                      t        ddd      } t        ddd      }t        ddd      }t        | d         dk(  sJ t        d| d   z        dk(  sJ |d   j                  || |z
        }t        |      d	k(  sJ y )
Nrr   rI   rF   r   Cr   zA[0]z3*A[0]z
(A - B)[0])r-   r.   subs)rr   r   r   Fs       r7   test_MatrixElement_printingr     s    S!QAS!QAS!QA4>V#$#QtW)*)	$QAA8|#$#r9   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@   rW   r   rA   rD   rY   r]   r`   rb   ri   rn   rp   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r9   r7   <module>r      s  I I I IE E E E : :   5 5 ' - 9 ) / &
'
1a&'Oj
 R4&
M&)	F/'C,
?N,$.8:6rF
>=

%r9   