
    g6+                     z   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>r>e>j?        @                    e>j?        A                    g           jB                  ZCeCjD        ZEd ZFd ZGd ZHd ZId ZJd ZKd ZLd ZMd ZNd ZOd  ZPd! ZQd" ZRd# ZSd$ ZTd% ZUd& ZVd' ZWd( ZXd) ZYd* ZZd+ Z[d, Z\d- Z]d. Z^d/S )0    )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                      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lessselectN)r&   r   r   doprintmodule_imports)printerps     Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/printing/tests/test_jax.pytest_jax_piecewise_regressionr8   (   st     llG1a!e*i((A??1UV V V V!k3L3L3L%MMMMMMM    c                  
   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&   r3   r   )laelae2s     r7   test_jax_logaddexpr=   5   sl    
Aq//C<<$$(CCCCCaD<<%%)EEEEEEEr9   c                  p   t           st          d           t          t          t          z  t          t
          t          f          } t          t
          t          t          f| d          }d\  }}t           j        	                    ddd          t           j        
                     |||          t          fdt          ||dz             D                                 sJ t          t          t          z  t          t
          t          f          } t          t
          t          t          f| d          }d\  }}t           j        	                    ddd          t           j        
                     |||          t          fdt          ||dz             D                                 sJ d S )	NJAX not installedr-   r   
   r/   rA   c              3   "   K   | ]	}|z  V  
d S N .0i_x_s     r7   	<genexpr>ztest_jax_sum.<locals>.<genexpr>E   s'      0V0Vbr0V0V0V0V0V0Vr9   c              3   "   K   | ]	}|z  V  
d S rD   rE   rF   s     r7   rJ   ztest_jax_sum.<locals>.<genexpr>L   s'      0U0URb0U0U0U0U0U0Ur9   )r-   r*   r   r   r   r   r   r   numpylinspaceallclosesumrange)sfa_b_rI   s       @r7   test_jax_sumrU   <   sp    " !!!AFQ1IA!QAu%%AFB			BB	'	'B9aaBmmS0V0V0V0VE"bSTfDUDU0V0V0V-V-VWWWWWAEAq!9A!QAu%%AFB			BB	'	'B9aaBmmS0U0U0U0U5RRSVCTCT0U0U0U-U-UVVVVVVVr9   c                  6   t           st          d           t          t          t          z   t
          z  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t          ||dz             D                                 sJ d S )	Nr?   r-   r@   )      rB   r/   rA   c              3   T   K   | ]"}t          d z             D ]}|z   |z  V  #dS )r/   N)rP   )rG   rH   j_c_d_rI   s      r7   rJ   z)test_jax_multiple_sums.<locals>.<genexpr>Z   sK      bbbPUVXZ\_`Z`PaPabb"BGr>bbbbbbbr9   )r-   r*   r   r   r   r   r   r   r   r   r   rL   rM   rN   rO   rP   )rQ   rR   rS   rT   r[   r\   rI   s       @@@r7   test_jax_multiple_sumsr]   O   s    " !!!QUaK!QQ1I..A!Q1a!U++AFBFB			BB	'	'B9aaBB33bbbbbbE"b1f4E4Ebbbbbd d d d d d dr9   c                     t           st          d           t          ddd          } t          ddd          }t          | |z            }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J d S )Nr?   M   Nr-   r/         rB   )	r-   r*   r
   r)   r   rL   arraymatmulall)r_   ra   cgrR   mambs         r7   test_jax_codegen_einsumrk   ]   s     " !!!S!QAS!QA	 Q	'	'B!QU##A	1a&1a&)	*	*B	1R&2q'*	+	+BAb"II))"b111668888888r9   c            
         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J t          | |          }t          | |f|d          }	 |	||          ||z   k                                    sJ t          | ||          }t          | ||f|d          }	 |	|||          ||z   |z   k                                    sJ t          | |||          }t          | |||f|d          }	 |	||||          ||z   |z   |z   k                                    sJ t          | ddg          }t          | f|d          }	 |	|          |j        k                                    sJ t          t          | |          g d          }t          | |f|d          }	 |	||          t           j                            t           j                            |ddg|ddg          d          k                                    sJ t          t          | |          d          }t          | |f|d          }	 |	||          t           j                            t           j                            |ddg|ddg          dd          k                                    sJ d S )Nr?   r_   r`   ra   PQr/   rb   rc   rd   rB   r      r-   )r/   r`   rb   r   r/   r`   )axis1axis2)r-   r*   r
   rL   re   r"   r   einsumrg   r#   r$   T	transposer%   diagonal)
r_   ra   rm   rn   ri   rj   mcmdrh   rR   s
             r7   test_jax_codegen_extrary   l   s    " !!!S!QAS!QAS!QAS!QA	1a&1a&)	*	*B	1R&2q'*	+	+B	1a&1a&)	*	*B	1R&1a&)	*	*B	Aq	!	!B!QU##AAb"II))"q!fb1a&AAAFFHHHHH	!QB!QU##AAb"IIB##%%%%%	!Q		B!QB&&AAb"bMMRU2X%**,,,,,	!Q1		B!Q1r5))AAb"b"Br",1133333	QA		B!r5!!AAbEERTM     	'1--|||	<	<B!QU##AAb"II,,SY-=-=b1a&"qRSf-U-UWcdddiikkkkk	)!Q//	8	8B!QU##AAb"II++CI,<,<R!QaQRV,T,T\]ef+gggllnnnnnnnr9   c                     t           st          d           t          t          d          } t	          t          f| d          }t           j                            g d          }t           j                             ||          g d          sJ t          t          d          } 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          sJ 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	          sJ t          dk    } t	          t          f| d          }t           j                            g d          }t           j                             ||          g d
          sJ t          dk    t          dk     z  } t	          t          f| d          }t           j                            g d          }t           j                             ||          g d          sJ t          dk    t          dk     z  } t	          t          f| d          }t           j                            g d          }t           j                             ||          g d          sJ d S )Nr?   r/   r-   )r   r/   r`   )FTF)TFT)TFF)TTF)FFT)FTTr`   )TTT)	r-   r*   r   r   r   rL   re   array_equalr   )erR   rI   s      r7   test_jax_relationalr}      s=    " !!!AA!q%  A		#	#B9  2(<(<(<=====1aA!q%  A		#	#B9  2(;(;(;<<<<<	
QA!q%  A		#	#B9  2(<(<(<=====	
aA!q%  A		#	#B9  2(;(;(;<<<<<	
QA!q%  A		#	#B9  2(<(<(<=====	
aA!q%  A		#	#B9  2(;(;(;<<<<< 
aAEA!q%  A		#	#B9  2(<(<(<=====	
aAEA!q%  A		#	#B9  2(:(:(:;;;;;;;r9   c                     t           st          d           t          t          t                    } t          t          t          f| d          }t           j                            g d          }d}t           j                             |||          g d          sJ t           j                            g d          }t           j                            g d          }t           j                             |||          g d          sJ t           j                            g d          }t           j                            g d          }t           j                             |||          g d          sJ d S )	Nr?   r-   )r   r/   r`   rb   r`   )r   r/   r   r/   )r`   r`   r`   r`   )r`   rb   rc      )r   r   r   r   )	r-   r*   r   r   r   r   rL   re   r{   )r|   rR   rS   rT   s       r7   test_jax_modr      s=    " !!!Aq		A!QE""A		&	&B	
B9  2rLLL99999		&	&B		&	&B9  2rLLL99999		&	&B		&	&B9  2rLLL9999999r9   c                      t           st          d           t          ddd          } t          g | d          } |            dk    sJ d S )Nr?   r`   rB   F)evaluater-   g      ?)r-   r*   r   r   )exprrR   s     r7   test_jax_powr      sU     " !!!q"u%%%DT5!!A133#::::::r9   c                      t           st          d           t          t          ft	          t                    d          } t           | d          dz
  dz
            dt          z  k    sJ d S )Nr?   r-   g|=g#B;)r-   r*   r   r   r   absJAX_DEFAULT_EPSILONrR   s    r7   test_jax_expm1r      si     " !!!!uQxx''Aqqxx%%'((E4G,GGGGGGGr9   c                      t           st          d           t          t          ft	          t                    d          } t           | d          dz
            dt          z  k    sJ d S )Nr?   r-   g>N}a+)r-   r*   r   r   r   r   r   r   s    r7   test_jax_log1pr      sd     " !!!!uQxx''Aqqxx%  E,?$???????r9   c            
          t           st          d           t           t          t          t
          ft          t          t
                    d          dd          dz
            t          k    sJ d S )Nr?   r-   rb   rc   r   )r-   r*   r   r   r   r   r   r   rE   r9   r7   test_jax_hypotr      sc     " !!!3xAaU33Aq99A=>>BUUUUUUUr9   c            	          t           st          d           t           t          t          ft          t                    d          d          dz
            t          k    sJ d S )Nr?   r-   d   r`   )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_log10r      s]     " !!!.xeAhh..s33a788<OOOOOOOr9   c            	          t           st          d           t           t          t          ft          t                    d          d          dz
            t          k    sJ d S )Nr?   r-   r       )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_exp2r     s]     " !!!-xd1ggu--a002566:MMMMMMMr9   c            	          t           st          d           t           t          t          ft          t                    d          d          dz
            t          k    sJ d S )Nr?   r-         )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_log2r     s]     " !!!-xd1ggu--c22Q677;NNNNNNNr9   c            	          t           st          d           t           t          t          ft          t                    d          d          dz
            t          k    sJ d S Nr?   r-   rc   r`   )r-   r*   r   r   r   r    r   rE   r9   r7   test_jax_Sqrtr     ]     " !!!-xd1ggu--a0014559LLLLLLLr9   c            	          t           st          d           t           t          t          ft          t                    d          d          dz
            t          k    sJ d S r   )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_sqrtr     r   r9   c                  P   t           st          d           t          ddd          } t          ddd          }| dz  |z  |z   }t          | |          |z   }t	          | |f|d          }t	          | |f|d          }t           j                            g dg d	g d
g          }t           j        j                            |          dk    sJ t           j                            g d          }t           j        	                     |||           |||                    sJ d S )Nr?   r_   rb   r   r/   rB   r-   )r/   r`   rb   )rb   r`   r   )r      ro   )rb   rc   r   )
r-   r*   r
   r   r   rL   re   linalgmatrix_rankrN   )r_   r   r   matsolve_exprrR   
f_matsolvem0x0s           r7   test_jax_matsolver     s%    " !!!S!QAS!QAr7Q;?D1%%)M!Qu%%A1a&-77J	)))YYY			:	;	;B9''++q0000		#	#B9jjR00!!B))<<<<<<<r9   c                  P   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    sJ d S )
Nr?   a_1rA   rb   a_2a_3a_4)   r   z)jax.numpy.block([[a_1, a_2], [a_3, a_4]]))r-   r*   r
   r	   shaper&   r3   )r   r   r   r   Ar5   s         r7   
test_16857r   .  s     " !!!
ub!
$
$C
ub!
$
$C
ub!
$
$C
ub!
$
$Cc3Z#s,--A7gllG??1!LLLLLLLr9   c                     t           st          d           t          ddd          } t          | | t	          d          z   d          }t           j                            ddgddgg          }t           j                            ddgddgg          } ||          |k                                    sJ d	d
lm	}  |dd          t          d          t          t          fd           d S )Nr?   r_   r`   r-   r/   rb   rc   r   r   )symbolsnT)integerc                  F    t            t                    z   d          S )Nr-   )r   r   )ra   r   s   r7   <lambda>z"test_issue_17006.<locals>.<lambda>L  s    AOU(K(K r9   )r-   r*   r
   r   r   rL   re   rg   sympy.core.symbolr   r+   NotImplementedError)r_   rR   ri   mrr   ra   r   s        @@r7   test_issue_17006r   =  s    " !!!S!QAAOU++A	1a&1a&)	*	*B	1a&1a&)	*	*BAbEERK))))))T"""AS!QA
 K K K K KLLLLLr9   c                      t                                          t          d                    dk    sJ t                                          t          d                    dk    sJ d S )N)rp   )rb   r   z!jax.numpy.array([[1, 2], [3, 5]])rp   zjax.numpy.array((1, 2)))r&   r3   r!   rE   r9   r7   test_jax_arrayr   O  s_    <<&6 7 788<_____<<f..2KKKKKKKr9   c                      t           d         dk    sJ t           d         dk    sJ t          d         dk    sJ t          d         dk    sJ d S )	NNaNzjax.numpy.nan
EulerGammazjax.numpy.euler_gammaacoszjax.numpy.arccoslogzjax.numpy.log)r'   r(   rE   r9   r7   test_jax_known_funcs_constsr   T  sb    &/9999-1HHHHH'+=====&/999999r9   c                  j    t                      } t          | d          sJ t          | d          sJ d S )N_print_acos
_print_log)r&   hasattr)prntrs    r7   test_jax_print_methodsr   \  s=    LLE5-(((((5,'''''''r9   c                  `    t                      } t          | d          sJ | j        dk    sJ d S )Nprintmethod_jaxcode)r&   r   r   )r5   s    r7   test_jax_printmethodr   b  s;    llG7M******,,,,,,r9   c                       G d dt                     } t                      }|                     | t          d                              dk    sJ d S )Nc                       e Zd Zd ZdS )+test_jax_custom_print_method.<locals>.expm1c                     | j         \  }d|                    |           d}|                    |j        dz   |z             S )Nzexpm1().)args_print_module_format_module)selfr5   r   functions       r7   r   z4test_jax_custom_print_method.<locals>.expm1._jaxcodel  sG    BA4q 1 1444H))'/C*?(*JKKKr9   N)__name__
__module____qualname__r   rE   r9   r7   r   r   j  s(        	L 	L 	L 	L 	Lr9   r   r   zjax.numpy.expm1(x))r   r&   r3   r   )r   r5   s     r7   test_jax_custom_print_methodr   h  ss    L L L L L L L L llG??55--..2FFFFFFFr9   N)_sympy.concrete.summationsr   sympy.core.modr   sympy.core.relationalr   r   (sympy.functions.elementary.miscellaneousr   $sympy.functions.elementary.piecewiser   &sympy.matrices.expressions.blockmatrixr	   "sympy.matrices.expressions.matexprr
   "sympy.matrices.expressions.specialr   sympy.utilities.lambdifyr   	sympy.abcr   r   r   r   r   r   r   
sympy.corer   r   r   sympy.codegen.matrix_nodesr   sympy.codegen.numpy_nodesr   r   sympy.codegen.cfunctionsr   r   r   r   r   r   r    sympy.tensor.arrayr!   0sympy.tensor.array.expressions.array_expressionsr"   r#   r$   r%   sympy.printing.numpyr&   r'   r(   3sympy.tensor.array.expressions.from_matrix_to_arrayr)   sympy.testing.pytestr*   r+   sympy.externalr,   r-   rL   finfore   dtypedeafult_float_infoepsr   r8   r=   rU   r]   rk   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   r9   r7   <module>r      s   ) ) ) ) ) )       8 8 8 8 8 8 8 8 9 9 9 9 9 9 : : : : : : > > > > > > ; ; ; ; ; ; 7 7 7 7 7 7 - - - - - - ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) , , , , , , , , , , 2 2 2 2 2 2 ; ; ; ; ; ; ; ; Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q $ $ $ $ $ $            W W W W W W W W W W W W W W W W - - - - - - - - ( ( ( ( ( ( mE 1)<)<)BCC,0
N 
N 
NF F FW W W&d d d9 9 9'o 'o 'oT1< 1< 1<f: : :(  H H H@ @ @V V V
P P PN N NO O OM M MM M M= = =*M M MM M M$L L L
: : :( ( (- - -
G 
G 
G 
G 
Gr9   