
    sg6+                        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>rJe>j~                  j                  e>j~                  j                  g       j                        ZCeCj                  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^y/)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      }| j                  |      dk(  sJ | j                  dh dik(  sJ y)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     P/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_jax.pytest_jax_piecewise_regressionr8   (   sZ     lG1a!e*i(A??1UV V V!!k3L%MMMM    c                      t        t        t              } t               j	                  |       dk(  sJ t        t        t              }t               j	                  |      dk(  sJ y )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   sQ    
Aq/C<$(CCCCaD<%)EEEEr9   c                     t         st        d       t        t        t        z  t        t
        t        f      } t        t
        t        t        f| d      }d\  }}t         j                  j                  ddd      t         j                  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                  j                  ddd      t         j                  j                   |||      t        fdt        ||dz         D                    sJ y )	NJAX not installedr-   r   
   r/   rA   c              3   (   K   | ]	  }|z    y wN .0i_x_s     r7   	<genexpr>ztest_jax_sum.<locals>.<genexpr>E   s     0Vbr0V   c              3   (   K   | ]	  }|z    y wrD   rE   rF   s     r7   rJ   ztest_jax_sum.<locals>.<genexpr>L   s     0URb0UrK   )r-   r*   r   r   r   r   r   r   numpylinspaceallclosesumrange)sfa_b_rI   s       @r7   test_jax_sumrV   <   s    !AFQ1IA!QAu%AFB			BB	'B99aBmS0VE"bSTfDU0V-VWWWAEAq!9A!QAu%AFB			BB	'B99aBmS0U5RRSVCT0U-UVVVr9   c                     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                  j                  ddd      t         j                  j                   |||      t        fdt        ||dz         D                    sJ y )	Nr?   r-   r@   )      rB   r/   rA   c              3   V   K   | ]   }t        d z         D ]  }|z   |z    " yw)r/   N)rQ   )rG   rH   j_c_d_rI   s      r7   rJ   z)test_jax_multiple_sums.<locals>.<genexpr>Z   s5     bbPUVXZ\_`Z`Pab"BGr>b>bs   &))r-   r*   r   r   r   r   r   r   r   r   r   rM   rN   rO   rP   rQ   )rR   rS   rT   rU   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99aBB3bE"b1f4Ebbd d dr9   c                     t         st        d       t        ddd      } t        ddd      }t        | |z        }t	        | |f|d      }t         j
                  j                  ddgddgg      }t         j
                  j                  dd	gd
dgg      } |||      t         j
                  j                  ||      k(  j                         sJ y )Nr?   M   Nr-   r/         rB   )	r-   r*   r
   r)   r   rM   arraymatmulall)r`   rb   cgrS   mambs         r7   test_jax_codegen_einsumrl   ]   s     !S!QAS!QA	 Q	'B!QU#A	1a&1a&)	*B	1R&2q'*	+Bb"I))"b1166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                  j	                  ddgdd	gg      }t         j                  j	                  dd
gddgg      }t         j                  j	                  ddgddgg      }t         j                  j	                  ddgd	dgg      }t        | |      }t        | |f|d      }	 |	||      t         j                  j                  |ddg|ddg      k(  j                         sJ t        | |      }t        | |f|d      }	 |	||      ||z   k(  j                         sJ t        | ||      }t        | ||f|d      }	 |	|||      ||z   |z   k(  j                         sJ t        | |||      }t        | |||f|d      }	 |	||||      ||z   |z   |z   k(  j                         sJ t        | ddg      }t        | f|d      }	 |	|      |j                  k(  j                         sJ t        t        | |      g d      }t        | |f|d      }	 |	||      t         j                  j                  t         j                  j                  |ddg|ddg      d      k(  j                         sJ t        t        | |      d      }t        | |f|d      }	 |	||      t         j                  j                  t         j                  j                  |ddg|ddg      dd      k(  j                         sJ y )Nr?   r`   ra   rb   PQr/   rc   rd   re   rB   r      r-   )r/   ra   rc   r   r/   ra   )axis1axis2)r-   r*   r
   rM   rf   r"   r   einsumrh   r#   r$   T	transposer%   diagonal)
r`   rb   rn   ro   rj   rk   mcmdri   rS   s
             r7   test_jax_codegen_extrarz   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b"I))"q!fb1a&AAFFHHH	!QB!QU#Ab"IB##%%%	!Q	B!QB&Ab"bMRU2X%**,,,	!Q1	B!Q1r5)Ab"b"Br",11333	QA	B!r5!AbERTTM   	'1-|	<B!QU#Ab"I,,SYY-=-=b1a&"qRSf-UWcddiikkk	)!Q/	8B!QU#Ab"I++CII,<,<R!QaQRV,T\]ef+ggllnnnr9   c                     t         st        d       t        t        d      } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d      sJ t        t        d      } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d      sJ t        dk  } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d      sJ t        dk  } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d      sJ t        dkD  } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d	      sJ t        dk\  } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d
      sJ t        dk\  t        dk  z  } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d      sJ t        dk\  t        dk  z  } t	        t        f| d      }t         j
                  j                  g d      }t         j
                  j                   ||      g d      sJ y )Nr?   r/   r-   )r   r/   ra   )FTF)TFT)TFF)TTF)FFT)FTTra   )TTT)	r-   r*   r   r   r   rM   rf   array_equalr   )erS   rI   s      r7   test_jax_relationalr~      sw    !AA!q% A		#B99  2(<===1aA!q% A		#B99  2(;<<<	
QA!q% A		#B99  2(<===	
aA!q% A		#B99  2(;<<<	
QA!q% A		#B99  2(<===	
aA!q% A		#B99  2(;<<< 
aAEA!q% A		#B99  2(<===	
aAEA!q% A		#B99  2(:;;;r9   c                     t         st        d       t        t        t              } t        t        t        f| d      }t         j                  j                  g d      }d}t         j                  j                   |||      g d      sJ t         j                  j                  g d      }t         j                  j                  g d      }t         j                  j                   |||      g d      sJ t         j                  j                  g d      }t         j                  j                  g d      }t         j                  j                   |||      g d      sJ y )	Nr?   r-   )r   r/   ra   rc   ra   )r   r/   r   r/   )ra   ra   ra   ra   )ra   rc   rd      )r   r   r   r   )	r-   r*   r   r   r   r   rM   rf   r|   )r}   rS   rT   rU   s       r7   test_jax_modr      s     !Aq	A!QE"A		&B	
B99  2rL999		&B		&B99  2rL999		&B		&B99  2rL999r9   c                  t    t         st        d       t        ddd      } t        g | d      } |       dk(  sJ y )Nr?   ra   rB   F)evaluater-   g      ?)r-   r*   r   r   )exprrS   s     r7   test_jax_powr      s8     !q"u%DT5!A3#::r9   c                      t         st        d       t        t        ft	        t              d      } t         | d      dz
  dz
        dt        z  k  sJ y )Nr?   r-   g|=g#B;)r-   r*   r   r   r   absJAX_DEFAULT_EPSILONrS   s    r7   test_jax_expm1r      sI     !!uQx'Aqx%%'(E4G,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 y )Nr?   r-   g>N}a+)r-   r*   r   r   r   r   r   r   s    r7   test_jax_log1pr      sD     !!uQx'Aqx% E,?$????r9   c            
          t         st        d       t         t        t        t
        ft        t        t
              d      dd      dz
        t        k  sJ y )Nr?   r-   rc   rd   r   )r-   r*   r   r   r   r   r   r   rE   r9   r7   test_jax_hypotr      sD     !3xAaU3Aq9A=>BUUUUr9   c            	          t         st        d       t         t        t        ft        t              d      d      dz
        t        k  sJ y )Nr?   r-   d   ra   )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_log10r      s>     !.xeAh.s3a78<OOOOr9   c            	          t         st        d       t         t        t        ft        t              d      d      dz
        t        k  sJ y )Nr?   r-   r       )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_exp2r     s>     !-xd1gu-a0256:MMMMr9   c            	          t         st        d       t         t        t        ft        t              d      d      dz
        t        k  sJ y )Nr?   r-         )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_log2r     s>     !-xd1gu-c2Q67;NNNNr9   c            	          t         st        d       t         t        t        ft        t              d      d      dz
        t        k  sJ y Nr?   r-   rd   ra   )r-   r*   r   r   r   r    r   rE   r9   r7   test_jax_Sqrtr     >     !-xd1gu-a01459LLLLr9   c            	          t         st        d       t         t        t        ft        t              d      d      dz
        t        k  sJ y r   )r-   r*   r   r   r   r   r   rE   r9   r7   test_jax_sqrtr     r   r9   c                     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
                  j                  g dg d	g d
g      }t         j
                  j                  j                  |      dk(  sJ t         j
                  j                  g d      }t         j
                  j                   |||       |||            sJ y )Nr?   r`   rc   r   r/   rB   r-   )r/   ra   rc   )rc   ra   r   )r      rp   )rc   rd   r   )
r-   r*   r
   r   r   rM   rf   linalgmatrix_rankrO   )r`   r   r   matsolve_exprrS   
f_matsolvem0x0s           r7   test_jax_matsolver     s     !S!QAS!QAr7Q;?D1%)M!Qu%A1a&-7J	)Y	:	;B99''+q000		#B99jR0!B)<<<r9   c                     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               }|j                  |      d	k(  sJ y )
Nr?   a_1rA   rc   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77glG??1!LLLLr9   c                     t         st        d       t        ddd      } t        | | t	        d      z   d      }t         j
                  j                  ddgddgg      }t         j
                  j                  ddgddgg      } ||      |k(  j                         sJ d	d
lm	}  |dd      t        d      t        t        fd       y )Nr?   r`   ra   r-   r/   rc   rd   r   r   )symbolsnT)integerc                  6    t          t              z   d      S )Nr-   )r   r   )rb   r   s   r7   <lambda>z"test_issue_17006.<locals>.<lambda>L  s    AOU(K r9   )r-   r*   r
   r   r   rM   rf   rh   sympy.core.symbolr   r+   NotImplementedError)r`   rS   rj   mrr   rb   r   s        @@r7   test_issue_17006r   =  s     !S!QAAOU+A	1a&1a&)	*B	1a&1a&)	*BbERK)T"AS!QA
 KLr9   c                      t               j                  t        d            dk(  sJ t               j                  t        d            dk(  sJ y )N)rq   )rc   r   z!jax.numpy.array([[1, 2], [3, 5]])rq   zjax.numpy.array((1, 2)))r&   r3   r!   rE   r9   r7   test_jax_arrayr   O  sD    <&6 78<____<f.2KKKKr9   c                  t    t         d   dk(  sJ t         d   dk(  sJ t        d   dk(  sJ t        d   dk(  sJ y )	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  sP    &/999-1HHHH'+====&/999r9   c                  P    t               } t        | d      sJ t        | d      sJ y )N_print_acos
_print_log)r&   hasattr)prntrs    r7   test_jax_print_methodsr   \  s)    LE5-(((5,'''r9   c                  V    t               } t        | d      sJ | j                  dk(  sJ y )Nprintmethod_jaxcode)r&   r   r   )r5   s    r7   test_jax_printmethodr   b  s-    lG7M****,,,r9   c                       G d dt               } t               }|j                   | t        d                  dk(  sJ y )Nc                       e Zd Zd Zy)+test_jax_custom_print_method.<locals>.expm1c                     | j                   \  }d|j                  |       d}|j                  |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  sD    BAq 12!4H))'//C*?(*JKKr9   N)__name__
__module____qualname__r   rE   r9   r7   r   r   j  s    	Lr9   r   r   zjax.numpy.expm1(x))r   r&   r3   r   )r   r5   s     r7   test_jax_custom_print_methodr   h  s:    L L lG??5-.2F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-   rM   finforf   dtypedeafult_float_infoepsr   r8   r=   rV   r^   rl   rz   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 9 : > ; 7 - ) ) ) , , 2 ; Q Q Q $  W W W - ( E)<)B)BC,00
NFW&d9'oT1<f:(H@V
PNOMM=*MM$L
:(-
Gr9   