U
    ZÊ¹j6+  ã                   @   s>  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZ d dlmZmZmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z= e=dƒZ>e>�rre>j? @e>j? Ag ¡jB¡ZCeCjDZEdd„ ZFdd„ ZGdd„ ZHdd„ ZIdd„ ZJd d!„ ZKd"d#„ ZLd$d%„ ZMd&d'„ ZNd(d)„ ZOd*d+„ ZPd,d-„ ZQd.d/„ ZRd0d1„ ZSd2d3„ ZTd4d5„ ZUd6d7„ ZVd8d9„ ZWd:d;„ ZXd<d=„ ZYd>d?„ ZZd@dA„ Z[dBdC„ Z\dDdE„ Z]dFdG„ Z^dHS )Ié    )ÚSum)ÚMod)ÚEqualityÚ
Unequality)Úsqrt)Ú	Piecewise)ÚBlockMatrix)ÚMatrixSymbol)ÚIdentity)Úlambdify)ÚxÚiÚjÚaÚbÚcÚd)ÚFunctionÚPowÚSymbol)ÚMatrixSolve)Ú	logaddexpÚ
logaddexp2)Úlog1pÚexpm1ÚhypotÚlog10Úexp2Úlog2ÚSqrt)ÚArray)ÚArrayTensorProductÚArrayAddÚPermuteDimsÚArrayDiagonal)Ú
JaxPrinterÚ_jax_known_constantsÚ_jax_known_functions)Úconvert_matrix_to_array)ÚskipÚraises)Úimport_moduleÚjaxc                  C   sF   t ƒ } tdtdk fdƒ}|  |¡dks*t‚| jddddhiksBt‚d	S )
zÊ
    NumPyPrinter needs to print Piecewise()'s choicelist as a list to avoid
    breaking compatibility with numpy 1.8. This is not necessary in numpy 1.9+.
    See gh-9747 and gh-9749 for details.
    é   r   )r   TzKjax.numpy.select([jax.numpy.less(x, 0),True], [1,0], default=jax.numpy.nan)z	jax.numpyÚselectÚlessÚnanN)r%   r   r   ÚdoprintÚAssertionErrorZmodule_imports)ÚprinterÚp© r5   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_jax.pyÚtest_jax_piecewise_regression(   s    ÿr7   c                  C   s@   t ttƒ} tƒ  | ¡dkst‚tttƒ}tƒ  |¡dks<t‚d S )Nzjax.numpy.logaddexp(a, b)zjax.numpy.logaddexp2(a, b))r   r   r   r%   r1   r2   r   )ZlaeZlae2r5   r5   r6   Útest_jax_logaddexp5   s    

r8   c               	      sø   t stdƒ ttt tttfƒ} ttttf| dƒ}d\}}t j 	ddd¡‰ t j 
|||ˆ ƒt‡ fdd„t||d ƒD ƒƒ¡s€t‚ttt tttfƒ} ttttf| dƒ}d\}}t j 	ddd¡‰ t j 
|||ˆ ƒt‡ fd	d„t||d ƒD ƒƒ¡sôt‚d S )
NúJAX not installedr,   ©r   é
   éÿÿÿÿr-   r;   c                 3   s   | ]}ˆ | V  qd S ©Nr5   ©Ú.0Úi_©Úx_r5   r6   Ú	<genexpr>E   s     ztest_jax_sum.<locals>.<genexpr>c                 3   s   | ]}|ˆ  V  qd S r=   r5   r>   rA   r5   r6   rC   L   s     )r,   r)   r   r   r   r   r   r   ÚnumpyÚlinspaceÚallcloseÚsumÚranger2   ©ÚsÚfÚa_Úb_r5   rA   r6   Útest_jax_sum<   s    6rN   c               	      s¤   t stdƒ ttt t tttfttt	fƒ} t
tttt	tf| dƒ}d\}}d\‰ ‰t j ddd¡‰t j |||ˆ ˆˆƒt‡ ‡‡fdd	„t||d ƒD ƒƒ¡s t‚d S )
Nr9   r,   r:   )é   é   r<   r-   r;   c                 3   s.   | ]&}t ˆ ˆd  ƒD ]}ˆ| | V  qqdS )r-   N)rH   )r?   r@   Zj_©Zc_Zd_rB   r5   r6   rC   Z   s       z)test_jax_multiple_sums.<locals>.<genexpr>)r,   r)   r   r   r   r   r   r   r   r   r   rD   rE   rF   rG   rH   r2   rI   r5   rQ   r6   Útest_jax_multiple_sumsO   s     "ÿrR   c                  C   s”   t stdƒ tdddƒ} tdddƒ}t| | ƒ}t| |f|dƒ}t j ddgddgg¡}t j dd	gd
dgg¡}|||ƒt j ||¡k ¡ s�t	‚d S )Nr9   ÚMé   ÚNr,   r-   é   é   éþÿÿÿr<   )
r,   r)   r	   r(   r   rD   ÚarrayÚmatmulÚallr2   )rS   rU   ÚcgrK   ÚmaÚmbr5   r5   r6   Útest_jax_codegen_einsum]   s    r_   c            
   
   C   s–  t stdƒ tdddƒ} tdddƒ}tdddƒ}tdddƒ}t j ddgdd	gg¡}t j dd
gddgg¡}t j ddgddgg¡}t j ddgd	dgg¡}t| |ƒ}t| |f|dƒ}	|	||ƒt j |ddg|ddg¡k ¡ sât	‚t
| |ƒ}t| |f|dƒ}	|	||ƒ|| k ¡ �st	‚t
| ||ƒ}t| ||f|dƒ}	|	|||ƒ|| | k ¡ �sXt	‚t
| |||ƒ}t| |||f|dƒ}	|	||||ƒ|| | | k ¡ �s¢t	‚t| ddgƒ}t| f|dƒ}	|	|ƒ|jk ¡ �sÖt	‚tt| |ƒddddgƒ}t| |f|dƒ}	|	||ƒt j t j |ddg|ddg¡d¡k ¡ �s6t	‚tt| |ƒdƒ}t| |f|dƒ}	|	||ƒt jjt j |ddg|ddg¡ddd�k ¡ �s’t	‚d S )Nr9   rS   rT   rU   ÚPÚQr-   rV   rW   rX   r<   r   é   r,   )r-   rT   rV   r   ©r-   rT   )Zaxis1Zaxis2)r,   r)   r	   rD   rY   r!   r   Zeinsumr[   r2   r"   r#   ÚTZ	transposer$   Zdiagonal)
rS   rU   r`   ra   r]   r^   ZmcÚmdr\   rK   r5   r5   r6   Útest_jax_codegen_extral   s>    
,
"(8rf   c                  C   sN  t stdƒ ttdƒ} ttf| dƒ}t j dddg¡}t j ||ƒdddg¡sRt‚t	tdƒ} ttf| dƒ}t j dddg¡}t j ||ƒdddg¡s˜t‚tdk } ttf| dƒ}t j dddg¡}t j ||ƒdddg¡sÜt‚tdk} ttf| dƒ}t j dddg¡}t j ||ƒdddg¡�s"t‚tdk} ttf| dƒ}t j dddg¡}t j ||ƒdddg¡�sht‚tdk} ttf| dƒ}t j dddg¡}t j ||ƒdddg¡�s®t‚tdktdk @ } ttf| dƒ}t j dddg¡}t j ||ƒdddg¡�süt‚tdktdk B } ttf| dƒ}t j dddg¡}t j ||ƒdddg¡�sJt‚d S )Nr9   r-   r,   r   rT   FT)
r,   r)   r   r   r   rD   rY   Úarray_equalr2   r   )ÚerK   rB   r5   r5   r6   Útest_jax_relational–   sD    

ri   c                  C   sò   t stdƒ tttƒ} tttf| dƒ}t j ddddg¡}d}t j |||ƒddddg¡s^t	‚t j ddddg¡}t j ddddg¡}t j |||ƒddddg¡s¦t	‚t j ddddg¡}t j ddddg¡}t j |||ƒddddg¡sît	‚d S )	Nr9   r,   r   r-   rT   rV   rW   é   )
r,   r)   r   r   r   r   rD   rY   rg   r2   )rh   rK   rL   rM   r5   r5   r6   Útest_jax_modÉ   s    
  rk   c                  C   s8   t stdƒ tdddd�} tg | dƒ}|ƒ dks4t‚d S )Nr9   rT   r<   F)Úevaluater,   g      à?)r,   r)   r   r   r2   )ÚexprrK   r5   r5   r6   Útest_jax_powÝ   s
    rn   c                  C   sB   t stdƒ ttfttƒdƒ} t| dƒd d ƒdt ks>t‚d S )Nr9   r,   g»½×Ùß|Û=g#B’¡œ·;)r,   r)   r   r   r   ÚabsÚJAX_DEFAULT_EPSILONr2   ©rK   r5   r5   r6   Útest_jax_expm1æ   s    rr   c                  C   s>   t stdƒ ttfttƒdƒ} t| dƒd ƒdt ks:t‚d S )Nr9   r,   g>ÃØN}a+)r,   r)   r   r   r   ro   rp   r2   rq   r5   r5   r6   Útest_jax_log1pî   s    rs   c                   C   s<   t stdƒ ttttftttƒdƒddƒd ƒtks8t‚d S )Nr9   r,   rV   rW   rj   )	r,   r)   ro   r   r   r   r   rp   r2   r5   r5   r5   r6   Útest_jax_hypotõ   s    rt   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S )Nr9   r,   éd   rT   )r,   r)   ro   r   r   r   rp   r2   r5   r5   r5   r6   Útest_jax_log10ú   s    rv   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S )Nr9   r,   rj   é    )r,   r)   ro   r   r   r   rp   r2   r5   r5   r5   r6   Útest_jax_exp2  s    rx   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S )Nr9   r,   é   é   )r,   r)   ro   r   r   r   rp   r2   r5   r5   r5   r6   Útest_jax_log2  s    r{   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S ©Nr9   r,   rW   rT   )r,   r)   ro   r   r   r   rp   r2   r5   r5   r5   r6   Útest_jax_Sqrt  s    r}   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S r|   )r,   r)   ro   r   r   r   rp   r2   r5   r5   r5   r6   Útest_jax_sqrt  s    r~   c                  C   sÐ   t stdƒ tdddƒ} tdddƒ}| d | | }t| |ƒ| }t| |f|dƒ}t| |f|dƒ}t j dddgddd	gd	d
dgg¡}t jj |¡dksœt	‚t j ddd	g¡}t j 
|||ƒ|||ƒ¡sÌt	‚d S )Nr9   rS   rV   r   r-   r<   r,   rT   rj   é   rb   rW   )r,   r)   r	   r   r   rD   rY   ZlinalgZmatrix_rankr2   rF   )rS   r   rm   Zmatsolve_exprrK   Z
f_matsolveZm0Zx0r5   r5   r6   Útest_jax_matsolve  s    $r€   c                  C   sz   t stdƒ tdddƒ} tdddƒ}tdddƒ}tdddƒ}t| |g||ggƒ}|jdks^t‚tƒ }| |¡d	ksvt‚d S )
Nr9   Úa_1r;   rV   Úa_2Úa_3Úa_4)é   r   z)jax.numpy.block([[a_1, a_2], [a_3, a_4]]))r,   r)   r	   r   Úshaper2   r%   r1   )r�   r‚   rƒ   r„   ÚAr3   r5   r5   r6   Ú
test_16857.  s    rˆ   c                     s¬   t stdƒ tdddƒ} t| | tdƒ dƒ}t j ddgddgg¡}t j ddgddgg¡}||ƒ|k ¡ spt‚d	d
l	m
} |ddd�‰tdˆˆƒ‰ tt‡ ‡fdd„ƒ d S )Nr9   rS   rT   r,   r-   rV   rW   rj   r   )ÚsymbolsÚnT)Úintegerc                      s   t ˆ ˆ tˆƒ dƒS )Nr,   )r   r
   r5   ©rU   rŠ   r5   r6   Ú<lambda>L  ó    z"test_issue_17006.<locals>.<lambda>)r,   r)   r	   r   r
   rD   rY   r[   r2   Zsympy.core.symbolr‰   r*   ÚNotImplementedError)rS   rK   r]   Úmrr‰   r5   rŒ   r6   Útest_issue_17006=  s    r‘   c                   C   s4   t ƒ  tdƒ¡dkst‚t ƒ  tdƒ¡dks0t‚d S )N)rc   )rV   rj   z!jax.numpy.array([[1, 2], [3, 5]])rc   zjax.numpy.array((1, 2)))r%   r1   r    r2   r5   r5   r5   r6   Útest_jax_arrayO  s    r’   c                   C   sD   t d dkst‚t d dks t‚td dks0t‚td dks@t‚d S )	NÚNaNzjax.numpy.nanZ
EulerGammazjax.numpy.euler_gammaÚacoszjax.numpy.arccosÚlogzjax.numpy.log)r&   r2   r'   r5   r5   r5   r6   Útest_jax_known_funcs_constsT  s    r–   c                  C   s&   t ƒ } t| dƒst‚t| dƒs"t‚d S )NZ_print_acosZ
_print_log)r%   Úhasattrr2   )Zprntrr5   r5   r6   Útest_jax_print_methods\  s    r˜   c                  C   s&   t ƒ } t| dƒst‚| jdks"t‚d S )NÚprintmethodÚ_jaxcode)r%   r—   r2   r™   )r3   r5   r5   r6   Útest_jax_printmethodb  s    r›   c                  C   s4   G dd„ dt ƒ} tƒ }| | tdƒƒ¡dks0t‚d S )Nc                   @   s   e Zd Zdd„ ZdS )z+test_jax_custom_print_method.<locals>.expm1c                 S   s.   | j \}d| |¡› d�}| |jd | ¡S )Nzexpm1(ú)Ú.)ÚargsZ_printZ_module_formatÚ_module)Úselfr3   r   Úfunctionr5   r5   r6   rš   l  s    z4test_jax_custom_print_method.<locals>.expm1._jaxcodeN)Ú__name__Ú
__module__Ú__qualname__rš   r5   r5   r5   r6   r   j  s   r   r   zjax.numpy.expm1(x))r   r%   r1   r   r2   )r   r3   r5   r5   r6   Útest_jax_custom_print_methodh  s    r¥   N)_Zsympy.concrete.summationsr   Zsympy.core.modr   Zsympy.core.relationalr   r   Z(sympy.functions.elementary.miscellaneousr   Z$sympy.functions.elementary.piecewiser   Z&sympy.matrices.expressions.blockmatrixr   Z"sympy.matrices.expressions.matexprr	   Z"sympy.matrices.expressions.specialr
   Zsympy.utilities.lambdifyr   Z	sympy.abcr   r   r   r   r   r   r   Z
sympy.corer   r   r   Zsympy.codegen.matrix_nodesr   Zsympy.codegen.numpy_nodesr   r   Zsympy.codegen.cfunctionsr   r   r   r   r   r   r   Zsympy.tensor.arrayr    Z0sympy.tensor.array.expressions.array_expressionsr!   r"   r#   r$   Zsympy.printing.numpyr%   r&   r'   Z3sympy.tensor.array.expressions.from_matrix_to_arrayr(   Zsympy.testing.pytestr)   r*   Zsympy.externalr+   r,   rD   ZfinforY   ZdtypeZdeafult_float_infoÚepsrp   r7   r8   rN   rR   r_   rf   ri   rk   rn   rr   rs   rt   rv   rx   r{   r}   r~   r€   rˆ   r‘   r’   r–   r˜   r›   r¥   r5   r5   r5   r6   Ú<module>   s`   $$
*3	