
    g5                        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. ZZd/S )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                  r     G d dt                     } t           | t                              dk    sJ d S )Nc                       e Zd Zd ZdS )test_printmethod.<locals>.fabsc                 H    d|                     | j        d                   z  S )Nzabs(%s)r   )_printargs)selfprinters     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/printing/tests/test_rcode.py_rcodez%test_printmethod.<locals>.fabs._rcode   s    w~~dil;;;;    N)__name__
__module____qualname__r8    r9   r7   fabsr1      s#        	< 	< 	< 	< 	<r9   r>   abs(x))r   r.   x)r>   s    r7   test_printmethodrA      sS    < < < < <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 d S )Nzsqrt(x)      ?)r.   r   r@   r=   r9   r7   test_rcode_sqrtrD      s]    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 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                     |j         S N
is_integerbaser   s     r7   <lambda>z test_rcode_Pow.<locals>.<lambda>*   s    cn 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   "   sY   A;;%QTy((((S&AaC..11AAAaDDHAqD))1a4!8455() ) ) )D>>W$$$$HQNN"##}444444g>88%@BKAuk&:;;;}LLLLC(<===NNNNNNr9   c                  z    t          t          t          t          t          z            ddd          dk    sJ d S )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+KLLLPiiii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 d S )NrI   zexp(1)r   Infz-Inf)r.   r   r   r   r=   r9   r7   test_rcode_constants_mathhr`   5   sl    Q==H$$$$9999"::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 d S )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   <   ss    ;#SSSSS	'	 ?@ @ @ @:"QQQQQQQr9   c                     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 d S )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5!Q!""m333333r9   c                      t          t          d                    dk    sJ t          t          d                    dk    sJ d S )NC   67z-1)r.   r	   r=   r9   r7   test_rcode_Integerrn   L   sF    %%%%%%%%%%r9   c            	         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 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   rW   r   r   r   r=   r9   r7   test_rcode_functionsrp   Q   s    Q3q66!""o55551a())-FFFFFc!QiiQ++,,0LLLLLLLr9   c            	      h   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 d S )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   s4   AS&AaC..11A1;;%S&AaCK"8"899A	! -	;< < < <CACd+++,,AS&Aq1uIq1u,=">">??Aaa!gg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 d S )Nz
ceiling(x)r?   zgamma(x))r.   r   r@   r   r   r=   r9   r7   test_rcode_exceptionsr}   j   sa    ,,,,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 d S )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47M7Mu6UV  ,<===LLLLQ(8999YFFFFQ(8999XEEEEEEr9   c                     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 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@   rW   zr=   r9   r7   test_rcode_booleanr   |   s;   ;;&    ==F""""<<7"""">>W$$$$Q<<7""""Q<<7""""!99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 d S )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                  R   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 d S )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

$
$
$C@@@@@
 Y1q5zAqD!A#;///D;;B
B
B
B
B
B
Br9   c                  d    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   ry   rz   s       r7   test_rcode_sincr      sB    ======477D
++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 d S )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CDDA;;;;;Q3q51a4<!Q$Aq3w<!C!CCc!ffLqPDdA>C8888CCdc"""A888888r9   c                      t          t          dk     t          t                    } t	          |           }d}||k    sJ d S )NrI   zifelse(x < 1,y,z))r#   r@   rW   r   r.   )r   r   rz   s      r7   test_rcode_ITEr      s8    q1uaDdAC888888r9   c                  2    t          t          d            d S )Nc                  H    t          t          t                    d          S )Ngarbage)method)r.   r   r@   r=   r9   r7   rP   z%test_rcode_settings.<locals>.<lambda>   s    eCFF9=== 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          |         }|                    |          dk    sJ t          d	          ||f         }|                    |          d
k    sJ t          d          |||f         }	|                    |	          dk    sJ |j        t                      k    sJ d S )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!#qkk3sA;;C!qAAuuAHCAA&((((CAAA)++++CAq!AA,....8suu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 d S )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!%155999E5Aq1uuuMMM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 d S )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666666r9   c                     t          ddt                    \  } }t          d          }t          d          }t          | |          } d| j        j        |j        dz  }t          ||          ||                    }||k    sJ d S )	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222DAqCACAAq		A 7&!-@@	AH
 11&&&D8r9   c                  n   t          dd          \  } }t          d          }t          d          }t          d          }t          d          }t          d|          }t          d	|           }d
}t          |||f         ||         z  ||         z   ||         z   ||                   }	|	|k    sJ d S )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999A666666r9   c                  z   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 d S )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111JAq!QCACACACACACACA	  	a1aj1aA:&!A$777A666666r9   c                     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 d S )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11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IIIA666666r9   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    s4||d         k    s*||d         k    s ||d         k    s||d         k    sJ d S d S d S d S d S d S )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  s3   D11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 	L 	LA 	C"Wr\BssG#CF"Wr\BssG#CF"Wr\BssG#CF"Wr\BssG#CF"Wr\BssG#CF"Wr\BssG#CFQKKQKKQKKQKKQKKQKKKK KKKKKKr9   c                      t           t          z   t          t                    z   t          z   } t	          | t          g          dk    sJ d S )N)dereferencezx + y + (*z) + sin((*z)))r@   rW   r   r   r.   )r   s    r7   test_dereference_printingr     sA    q53q66>ADA3'''+EEEEEEEr9   c            	      :   t          t          t          z  t          dt          z   t          dk    ft          df          t	          t
                    g          } t          ddd          }t          | |          }|dk    sJ t          d|d         z  t          dk    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 d S )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993q66B
C
CCS!QAc1A	   
 a$iQ'!D'499C$LLH1T7RDdA@AAAAS!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<<!+Q/1 	2 	2A A;;		 	 	 	 	 	r9   c                     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 d S )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    77Q;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 d S )Nz
x = y + z;+zx += y + z;)r.   r&   r@   rW   r   r%   r=   r9   r7   test_rcode_Assignmentr     sX    Aq1u%%&&,6666AsAE**++}<<<<<<r9   c            	          t          t          t          ddd          t          t          dt                    g          } t          |           }|dk    sJ d S )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     s]    AuQAAsA!6!6 788A
((C       r9   c                  F   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                             || |z
            }t          |          d	k    sJ d S )
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88|######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      sr  I I I I I I I I I I I I I I I I I I I I I I I I I I I IE E E E E E E E E E E E E E E E E E E E E E E E E E E E E E : : : : : : : : : : : : : : : :             5 5 5 5 5 5 5 5 5 5 ' ' ' ' ' ' - - - - - - 9 9 9 9 9 9 ) ) ) ) ) ) ) ) / / / / / / / / & & & & & &
''

1a& & &' ' 'O O Oj j j
     R R R4 4 4& & &
M M M  &) ) )	F 	F 	F/ / /' ' 'C C C,  
 
 
  ? ? ?  N N N  ,  $  .  8  :6 6 6rF F F
  >  = = =
  
% 
% 
% 
% 
%r9   