a
    {d()                     @   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 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-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; e;dZ<e<rje<j=>e<j=?g j@ZAeAjBZCdd ZDdd ZEdd ZFdd ZGdd ZHd d! ZId"d# ZJd$d% ZKd&d' ZLd(d) ZMd*d+ ZNd,d- ZOd.d/ ZPd0d1 ZQd2d3 ZRd4d5 ZSd6d7 ZTd8d9 ZUd:d; ZVd<d= ZWd>d? ZXd@dA ZYdBdC ZZdDS )E    )Sum)Mod)Equality
Unequality)sqrt)	Piecewise)BlockMatrix)MatrixSymbol)Identity)lambdify)xijabcd)Pow)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   sD   t  } tdtdk fd}| |dks*J | jdh diks@J 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>   nanselectZlessN)r#   r   r   doprintZmodule_imports)printerp r1   f/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/sympy/printing/tests/test_jax.pytest_jax_piecewise_regression'   s    r3   c                  C   s@   t tt} t | dksJ ttt}t |dks<J d S )Nzjax.numpy.logaddexp(a, b)zjax.numpy.logaddexp2(a, b))r   r   r   r#   r.   r   )ZlaeZlae2r1   r1   r2   test_jax_logaddexp4   s    

r4   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 sJ 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 sJ d S )
NJAX not installedr*   r   
   r+   r7   c                 3   s   | ]} | V  qd S Nr1   .0i_x_r1   r2   	<genexpr>D       ztest_jax_sum.<locals>.<genexpr>c                 3   s   | ]}|  V  qd S r9   r1   r:   r=   r1   r2   r?   K   r@   )r*   r'   r   r   r   r   r   r   numpylinspaceallclosesumrangesfa_b_r1   r=   r2   test_jax_sum;   s    6rK   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 sJ d S )
Nr5   r*   r6   )      r8   r+   r7   c                 3   s.   | ]&}t  d  D ]}| | V  qqdS )r+   N)rE   )r;   r<   Zj_Zc_Zd_r>   r1   r2   r?   Y   r@   z)test_jax_multiple_sums.<locals>.<genexpr>)r*   r'   r   r   r   r   r   r   r   r   r   rA   rB   rC   rD   rE   rF   r1   rN   r2   test_jax_multiple_sumsN   s     "rO   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 sJ d S )Nr5   M   Nr*   r+         r8   )	r*   r'   r	   r&   r   rA   arraymatmulall)rP   rR   cgrH   mambr1   r1   r2   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 sJ t	| |}t| |f|d}	|	|||| k sJ t	| ||}t| ||f|d}	|	||||| | k sXJ t	| |||}t| |||f|d}	|	|||||| | | k sJ t
| ddg}t| f|d}	|	||jk sJ t
t| |g d}t| |f|d}	|	||t jt j|ddg|ddgdk s2J tt| |d}t| |f|d}	|	||t jjt j|ddg|ddgdddk sJ d S )Nr5   rP   rQ   rR   PQr+   rS   rT   rU   r8   r      r*   )r+   rQ   rS   r   r+   rQ   )Zaxis1Zaxis2)r*   r'   r	   rA   rV   r   r   ZeinsumrX   r    r!   TZ	transposer"   Zdiagonal)
rP   rR   r]   r^   rZ   r[   ZmcZmdrY   rH   r1   r1   r2   test_jax_codegen_extrak   s>    
,
"(8rb   c                  C   s.  t std ttd} ttf| d}t jg d}t j||g dsNJ ttd} ttf| d}t jg d}t j||g dsJ tdk } ttf| d}t jg d}t j||g dsJ tdk} ttf| d}t jg d}t j||g dsJ tdk} ttf| d}t jg d}t j||g d	sTJ tdk} ttf| d}t jg d}t j||g d
sJ tdktdk @ } ttf| d}t jg d}t j||g dsJ tdktdk B } ttf| d}t jg d}t j||g ds*J d S )Nr5   r+   r*   )r   r+   rQ   )FTF)TFT)TFF)TTF)FFT)FTTrQ   )TTT)	r*   r'   r   r   r   rA   rV   array_equalr   )erH   r>   r1   r1   r2   test_jax_relational   sD    

re   c                  C   s   t std ttt} tttf| d}t jg d}d}t j|||g dsVJ t jg d}t jg d}t j|||g dsJ t jg d}t jg d}t j|||g dsJ d S )	Nr5   r*   )r   r+   rQ   rS   rQ   )r   r+   r   r+   )rQ   rQ   rQ   rQ   )rQ   rS   rT      )r   r   r   r   )	r*   r'   r   r   r   r   rA   rV   rc   )rd   rH   rI   rJ   r1   r1   r2   test_jax_mod   s    
rg   c                  C   s8   t std tdddd} tg | d}| dks4J d S )Nr5   rQ   r8   F)evaluater*   g      ?)r*   r'   r   r   )exprrH   r1   r1   r2   test_jax_pow   s
    rj   c                  C   sB   t std ttfttd} t| dd d dt ks>J d S )Nr5   r*   g|=g#B;)r*   r'   r   r   r   absJAX_DEFAULT_EPSILONrH   r1   r1   r2   test_jax_expm1   s    rn   c                  C   s>   t std ttfttd} t| dd dt ks:J d S )Nr5   r*   g>N}a+)r*   r'   r   r   r   rk   rl   rm   r1   r1   r2   test_jax_log1p   s    ro   c                   C   s<   t std ttttftttdddd tks8J d S )Nr5   r*   rS   rT   rf   )r*   r'   rk   r   r   r   r   rl   r1   r1   r1   r2   test_jax_hypot   s    rp   c                   C   s6   t std tttfttddd tks2J d S )Nr5   r*   d   rQ   )r*   r'   rk   r   r   r   rl   r1   r1   r1   r2   test_jax_log10   s    rr   c                   C   s6   t std tttfttddd tks2J d S )Nr5   r*   rf       )r*   r'   rk   r   r   r   rl   r1   r1   r1   r2   test_jax_exp2   s    rt   c                   C   s6   t std tttfttddd tks2J d S )Nr5   r*         )r*   r'   rk   r   r   r   rl   r1   r1   r1   r2   test_jax_log2  s    rw   c                   C   s6   t std tttfttddd tks2J d S Nr5   r*   rT   rQ   )r*   r'   rk   r   r   r   rl   r1   r1   r1   r2   test_jax_Sqrt  s    ry   c                   C   s6   t std tttfttddd tks2J d S rx   )r*   r'   rk   r   r   r   rl   r1   r1   r1   r2   test_jax_sqrt  s    rz   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g dg d	g d
g}t jj|dksJ t jg d}t j	||||||sJ d S )Nr5   rP   rS   r   r+   r8   r*   )r+   rQ   rS   )rS   rQ   rf   )rf      r_   )rS   rT   rf   )
r*   r'   r	   r   r   rA   rV   ZlinalgZmatrix_rankrC   )rP   r   ri   Zmatsolve_exprrH   Z
f_matsolveZm0Zx0r1   r1   r2   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^J t }||d	ksvJ d S )
Nr5   a_1r7   rS   a_2a_3a_4)   r{   z)jax.numpy.block([[a_1, a_2], [a_3, a_4]]))r*   r'   r	   r   shaper#   r.   )r}   r~   r   r   Ar/   r1   r1   r2   
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 spJ d	d
lm	} |dddtd t
t fdd d S )Nr5   rP   rQ   r*   r+   rS   rT   rf   r   )symbolsnT)integerc                      s   t   t dS )Nr*   )r   r
   r1   rR   r   r1   r2   <lambda>K  r@   z"test_issue_17006.<locals>.<lambda>)r*   r'   r	   r   r
   rA   rV   rX   Zsympy.core.symbolr   r(   NotImplementedError)rP   rH   rZ   mrr   r1   r   r2   test_issue_17006<  s    r   c                   C   s4   t  tddksJ t  tddks0J d S )N)r`   )rS   rf   z!jax.numpy.array([[1, 2], [3, 5]])r`   zjax.numpy.array((1, 2)))r#   r.   r   r1   r1   r1   r2   test_jax_arrayM  s    r   c                   C   sD   t d dksJ t d dks J td dks0J td dks@J d S )	NNaNzjax.numpy.nanZ
EulerGammazjax.numpy.euler_gammaacoszjax.numpy.arccoslogzjax.numpy.log)r$   r%   r1   r1   r1   r2   test_jax_known_funcs_constsQ  s    r   c                  C   s&   t  } t| dsJ t| ds"J d S )NZ_print_acosZ
_print_log)r#   hasattr)Zprntrr1   r1   r2   test_jax_print_methodsX  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   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*   rA   ZfinforV   ZdtypeZdeafult_float_infoZepsrl   r3   r4   rK   rO   r\   rb   re   rg   rj   rn   ro   rp   rr   rt   rw   ry   rz   r|   r   r   r   r   r   r1   r1   r1   r2   <module>   s\   $$
*3	