U
    ZÊ¹jÕ5  ã                   @   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$t‚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   ú^/var/www/html/bwave/python/venv/lib/python3.8/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ÚAssertionError)r7   r1   r1   r2   Útest_printmethod   s    r;   c                   C   s@   t ttƒƒdkst‚t td ƒdks(t‚t ttƒƒdks<t‚d S )Nzsqrt(x)ç      à?)r-   r   r9   r:   r1   r1   r1   r2   Útest_rcode_sqrt   s    r=   c                  C   sö   t td ƒdkst‚t ttd  ƒdks,t‚tdttdt ƒƒ} t d| tƒd ttt    td t  ƒdkstt‚t td	 ƒd
ksˆt‚t ttddƒ ƒdks¢t‚dd„ dfdd„ dfg}t td d|id�dksÖt‚t td d|id�dksòt‚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   +   rH   ÚpowÚPow©Zuser_functionszdpowi(x, 3)gš™™™™™	@zpow(x, 3.2))r-   r9   r:   Úyr(   r   r   )r?   Z_cond_cfuncr1   r1   r2   Útest_rcode_Pow"   s    *ÿ

ÿrM   c                   C   s(   t tttt ƒdddœd�dks$t‚d S )NZmy_maxZmy_pow)r   rJ   rK   zmy_max(x, my_pow(x, 2)))r-   r   r9   r:   r1   r1   r1   r2   Útest_rcode_Max0   s    rN   c                   C   sJ   t tdƒƒdkst‚t tƒdks$t‚t tƒdks4t‚t t ƒdksFt‚d S )NrA   zexp(1)r   ZInfz-Inf)r-   r   r:   r   r   r1   r1   r1   r2   Útest_rcode_constants_mathh5   s    rO   c                   C   s@   t dt ƒdkst‚t dt ƒdks(t‚t dt ƒdks<t‚d S )Nr@   z-GoldenRatio = 1.61803398874989;
2*GoldenRatioz&Catalan = 0.915965594177219;
2*Catalanz,EulerGamma = 0.577215664901533;
2*EulerGamma)r-   r	   r:   r   r
   r1   r1   r1   r2   Útest_rcode_constants_other<   s    ÿÿrP   c                   C   s�   t tddƒƒdkst‚t tddƒƒdks,t‚t tddƒƒdksBt‚t td	dƒƒdksXt‚t ttddƒ ƒd
ksrt‚t tddƒt ƒdksŒt‚d S )Nr>   é   z3.0/7.0é   é	   Ú2iùÿÿÿz-3.0/7.0éýÿÿÿzx + 3.0/7.0z(3.0/7.0)*x)r-   r   r:   r9   r1   r1   r1   r2   Útest_rcode_RationalC   s    rV   c                   C   s,   t tdƒƒdkst‚t tdƒƒdks(t‚d S )NéC   Z67éÿÿÿÿz-1)r-   r   r:   r1   r1   r1   r2   Útest_rcode_IntegerL   s    rY   c                   C   s^   t ttƒttƒ ƒdkst‚t ttƒttƒ ƒdks8t‚t tt	ttƒt
ttƒƒƒdksZt‚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   r   rL   r   r   r   r1   r1   r1   r2   Útest_rcode_functionsQ   s    rZ   c                  C   sÊ   t dƒ} tdt| d|  ƒƒ}t|| ƒƒdks0t‚tdt| d|  t ƒƒ}t|| ƒƒdt ¡  ksdt‚tdƒ}tdt dd	d
�ƒ}tdt| | d|   d|   ƒƒ}t||| ƒ|| d�}d}||ksÆt‚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)   r*   )r9   r?   r[   r\   ÚresÚrefr1   r1   r2   Útest_rcode_inline_functionW   s     ÿ
ÿ ÿrd   c                   C   s@   t ttƒƒdkst‚t ttƒƒdks(t‚t ttƒƒdks<t‚d S )Nz
ceiling(x)r8   zgamma(x))r-   r   r9   r:   r   r   r1   r1   r1   r2   Útest_rcode_exceptionsj   s    re   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sNt‚tt| ƒ|d�dksft‚tt|ƒ|d�dks~t‚d S )Nr9   Fr^   r]   TZmyceilc                 S   s   | j  S rB   rC   ©r9   r1   r1   r2   rG   u   rH   z+test_rcode_user_functions.<locals>.<lambda>r7   c                 S   s   | j S rB   rC   rf   r1   r1   r2   rG   u   rH   Úabs)r   r   rK   z	myceil(x)zfabs(x)zabs(n))r   r-   r   r:   r   )r9   r]   Zcustom_functionsr1   r1   r2   Útest_rcode_user_functionsp   s    þrh   c                   C   sâ   t dƒdkst‚t tjƒdks"t‚t dƒdks2t‚t tjƒdksDt‚t tt@ ƒdksXt‚t ttB ƒdkslt‚t t ƒdks~t‚t tt@ t@ ƒdks–t‚t ttB tB ƒd	ks®t‚t tt@ tB ƒd
ksÆt‚t ttB t@ ƒdksÞt‚d S )NTÚTrueFÚFalsezx & yzx | yz!xz	x & y & zz	x | y | zz	z | x & yzz & (x | y))r-   r:   r   ÚtrueÚfalser9   rL   Úzr1   r1   r1   r2   Útest_rcode_boolean|   s    rn   c                   C   sˆ   t tttƒƒdkst‚t tttƒƒdks,t‚t tttƒƒdksBt‚t tttƒƒdksXt‚t tttƒƒdksnt‚t t	ttƒƒdks„t‚d S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)
r-   r   r9   rL   r:   r    r   r   r   r   r1   r1   r1   r2   Útest_rcode_Relational‰   s    ro   c                  C   sÞ   t ttdk ftd dfƒ} t| ƒ}d}||ks2t‚tdƒ}t| |ƒ}d}||ksTt‚dt ttdk ftd tdk ftd dfƒ } t| ƒdks�t‚t| d	d
�}|dks¨t‚dt ttdk ftd tdk fƒ } t| ƒdksÚt‚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))Ú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:   r   )Úexprrb   rc   rp   r1   r1   r2   Útest_rcode_Piecewise’   s    
,"rs   c                  C   s0   ddl m}  | tƒ}t|ƒ}d}||ks,t‚d S )Nr   )Úsincz(ifelse(x != 0,sin(x)/x,1)))Z(sympy.functions.elementary.trigonometricrt   r9   r-   r:   )rt   rr   rb   rc   r1   r1   r2   Útest_rcode_sinc¨   s
    ru   c                  C   s®   t dtttdk ftd tdk ftd dfƒ ƒ} | dks<t‚tt t td  td  tdtdk fdƒ ttƒ d }t |ƒ} d}| |ksŽt‚d	}t |d
d�} | |ksªt‚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;rq   r`   )r-   r   r9   r:   rL   rm   r   )Úprr   rc   r1   r1   r2   Útest_rcode_Piecewise_deep°   s    0:rw   c                  C   s,   t tdk ttƒ} t| ƒ}d}||ks(t‚d S )NrA   zifelse(x < 1,y,z))r"   r9   rL   rm   r-   r:   )rr   rv   rc   r1   r1   r2   Útest_rcode_ITE½   s    rx   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   Å   rH   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`t‚td	ƒ||f }| |¡d
ks‚t‚tdƒ|||f }	| |	¡dks¦t‚|jtƒ ks¶t‚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_Indexedr:   )
r]   ÚmÚor\   r}   r~   rv   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s t‚d S )Né   rL   )Úshaper9   ÚDyrA   r\   F)ra   Zcontractz&Dy[i] = (y[%s] - y[i])/(x[%s] - x[i]);)r)   r*   r   r-   ÚrhsÚlhsr:   )Zlen_yrL   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slt‚d S )Nún mTr^   r[   r9   rL   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]   r�   r[   r9   rL   r\   r}   Úsrq   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`t‚d S )	Nzi mT)r_   Úclsr9   rL   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\   r�   r9   rL   Ú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s„t‚d S )Nr‹   Tr^   r[   r9   rL   rm   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�   r[   r9   rL   rm   r\   r}   r�   rq   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sŽt‚d S )Nún m o pTr^   ÚaÚbrL   r\   r}   r~   Úlz¾for (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‚   rv   r–   r—   rL   r\   r}   r~   r˜   r�   rq   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s¦t‚d S )Nr•   Tr^   r–   r—   rq   rL   r\   r}   r~   r˜   zÐfor (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‚   rv   r–   r—   rq   rL   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�s¸t‚d S )Nr•   Tr^   r–   r—   rq   rL   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`   rX   r   rA   r@   r>   é   r„   rŒ   )r]   r�   r‚   rv   r–   r—   rq   rL   r\   r}   r~   Ús0Ús1Ús2Zs3rc   r1   r1   r2   Útest_rcode_loops_multiple_termsZ  sL    


ÿÿ
ÿÿD ÿ
ÿ
þ
ý
ü
ûrŸ   c                  C   s.   t t ttƒ t } t| tgd�dks*t‚d S )N)Údereferencezx + y + (*z) + sin((*z)))r9   rL   r   rm   r-   r:   )rr   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sNt‚td|d  tdkf|d dfƒt|d	 ƒ |d
  }t|ƒ}|dks˜t‚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 t‚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›   z�M[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   rL   r   r   rm   r,   r-   r:   r   r   )Zmatr[   rv   rr   r£   r¤   r�   r1   r1   r2   Útest_Matrix_printing˜  s$    ,
ÿ6$þÿr¥   c                  C   s†   t tƒt } t| ƒdkst‚t| dƒ}|dks2t‚tt dt td  ƒt td  ƒ}|dksbt‚t ttƒƒ} t| ƒ}|dks‚t‚d S )Nz	y*sign(x)rm   zz = y*sign(x);r@   zx^2 + x*sign(x^2 + 2*x)zsign(cos(x)))r   r9   rL   r-   r:   r   )rr   rv   r1   r1   r2   Útest_rcode_sgn·  s    
$r¦   c                   C   s:   t tttt ƒƒdkst‚t ttdtt ƒƒdks6t‚d S )Nz
x = y + z;ú+zx += y + z;)r-   r%   r9   rL   rm   r:   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s2t‚d S )Nr   é
   r@   Ú*z.for(x in seq(from=0, to=9, by=2){
   y *= x;
})r#   r9   r!   r$   rL   r-   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s8t‚td| d  ƒdksPt‚|d  || | ¡}t|ƒd	kstt‚d S )
Nr[   rA   r>   r   ÚCr¢   zA[0]z3*A[0]z
(A - B)[0])r,   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   rL   rm   r;   r=   rM   rN   rO   rP   rV   rY   rZ   rd   re   rh   rn   ro   rs   ru   rw   rx   r|   rƒ   rŠ   rŽ   r“   r”   r™   rš   rŸ   r¡   r¥   r¦   r¨   r¬   r°   r1   r1   r1   r2   Ú<module>   sZ   8< 		9