U
    L?h6+                     @   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   O/var/www/html/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 st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 st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 st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 st	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 st	t
| |}t| |f|d}	|	|||| k st	t
| ||}t| ||f|d}	|	||||| | k sXt	t
| |||}t| |||f|d}	|	|||||| | | k st	t| ddg}t| f|d}	|	||jk st	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 st	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sttdk } ttf| d}t jdddg}t j||dddgst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sttdktdk @ } ttf| d}t jdddg}t j||dddgst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st	t jddddg}t jddddg}t j|||ddddgst	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st	t jddd	g}t j
||||||st	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	