
    MZd>                     .   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mZmZ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mZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d d
l&m'Z'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF  ed      \  ZGZHZI e;d      ZJd ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZT G d  d!e      ZUd" ZVd# ZWd$ ZXd% ZYd& ZZd' Z[d( Z\d) Z]d* Z^d+ Z_d, Z`d- Zay.)/    )
Assignment)none)expm1log1p)cosm1)MatrixSolve)
ExprModsymbolsEqLeGtzooooRationalPow)pi)S)acosKroneckerDelta	PiecewisesignsqrtMinMaxcotacschaseccoth)AndOr)SparseMatrixMatrixSymbolIdentity)MpmathPrinterPythonCodePrinterpycodeSymPyPrinter)TensorflowPrinter)NumPyPrinterSciPyPrinter)raisesskip)IndexedBaseIdx)ArraySymbolArrayDiagonalArrayContraction	ZeroArrayOneArray)import_module)loggammazx y zpc            
         t               } | j                  rJ | j                  t        t        z        dk(  sJ | j                  t        t        d            dk(  sJ | j                  t        t        t                     dk(  sJ | j                  t        t         t                    dk(  sJ | j                  t        t        t                    dk(  sJ | j                  t        t        t                    dk(  sJ | j                  dt        t        z   z        d	k(  sJ | j                  rJ | j                  t              d
k(  sJ | j                  ddhik(  sJ | j                  t        t        dd      z        dk(  sJ | j                  t        t                    dk(  sJ | j                  dddhik(  sJ | j                  t        t                    dk(  sJ | j                  t        t                    dk(  sJ | j                  t        t                    dk(  sJ | j                  t        t                    dk(  sJ | j                  t        t                    dk(  sJ | j                  t!        t        d            dk(  sJ | j                  t#        dt%        t        d      fdt        dkD  f            dk(  sJ | j                  t#        dt'        t        d      fdt)        t        d      fd            dk(  sJ | j                  t+        t                    dk(  sJ | j                  t,        d         dk(  sJ | j                  t/        t        t                    dk(  sJ | j                  d       d!k(  sJ | j                  ddg      d"k(  sJ | j                  t1        t        t                    d#k(  sJ | j                  t3        t        t                    d$k(  sJ y )%Nzx**y   zx % 2z-(x % y)z(-x) % yzx and yzx or y   z	1/(x + y)zmath.pimathr   math.sqrt(x)r   zmath.acos(x)z1/math.tan(x)z9(math.exp(x) + math.exp(-x))/(math.exp(x) - math.exp(-x))zmath.acos(1/x)z&math.log(math.sqrt(1 + x**(-2)) + 1/x)zx = 2r      z/((1) if (x == 0) else (2) if (x > 6) else None)   Fevaluatez/((2) if (x <= 0) else (3) if (x > 0) else None)z((0.0 if x == 0 else math.copysign(1, x))r   r:   zp[0, 1]z(1 if x == y else 0)r9   r>   z(2, 3)z[2, 3]z	min(x, y)z	max(x, y))r&   module_importsdoprintxyr
   r    r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   prntrs    B/usr/lib/python3/dist-packages/sympy/printing/tests/test_pycode.pytest_PythonCodePrinterrJ      st   E####==A&(((==Q#w...==#a)$
222==aR$
222==Q#y000==Aq"h...==AaC![000####==	)))FTF#3333==HQN*+~=====a!^333FT6N#;;;;==a!^333==Q O333==a!%````==a!%5555==q"&NNNN==Aq)*g555==Ar!Qx=AaC" #&WX X X==Ar!Qx=Bq!H7 8<UU U U ==a!%OOOO==4!Y...==!,-1GGGG==8+++==!A8+++==Q#{222==Q#{222    c                  \    t               } | j                  dk(  sJ t        t        d        y )Npython3c                      t        ddi      S )Nstandardpython4)r&    rK   rI   <lambda>z1test_PythonCodePrinter_standard.<locals>.<lambda>M   s    0*Y1GH rK   )r&   rO   r,   
ValueErrorrG   s    rI   test_PythonCodePrinter_standardrT   H   s'    E>>Y&&&
:HIrK   c                     t               } | j                  t        t                    dk(  sJ | j                  t	        dd            dk(  sJ | j                  t
        j                        dk(  sJ | j                  t
        j                        dk(  sJ | j                  t
        j                        dk(  sJ | j                  t
        j                        dk(  sJ | j                  t
        j                        d	k(  sJ | j                  t
        j                        d
k(  sJ | j                  t
        j                        dk(  sJ | j                  t        t                    dk(  sJ y )Nzmpmath.sign(x)r:   r9   zmpmath.mpf(1)/mpmath.mpf(2)zmpmath.ez	mpmath.piz
mpmath.phizmpmath.eulerz
mpmath.nanz
mpmath.infzmpmath.ninfzmpmath.loggamma(x))r%   rD   r   rE   r   r   Exp1PiGoldenRatio
EulerGammaNaNInfinityNegativeInfinityr6   )r7   s    rI   test_MpmathPrinterr]   P   s   A99T!W!111199Xa^$(EEEE99QVV
***99QTT?k)))99Q]]#|33399Q\\"n44499QUU|+++99QZZ L00099Q''(M99999Xa[!%9999rK   c                     ddl m}  ddlm} ddlm}m}m} ddlm	} ddl
m} ddlm} ddlm}m}	 dd	lm}
m} t)               }|j+                  t-        t.                    d
k(  sJ t1        ddd      }t1        ddd      }t1        ddd      }t1        ddd      }|j+                  |dz        dk(  sJ |j+                  |dz        dk(  sJ |j+                  t3        d            dk(  sJ t1        ddd      }t1        ddd      }|j+                  t5        ||            dk(  sJ |j+                  t5        ||      |z         dk(  sJ |j+                   |	dd            dk(  sJ |j+                   |dd            dk(  sJ |j+                   |dd | |
|f|
|z                     dk(  sJ |j+                   |||            dk(  sJ |j+                   |||            d k(  sJ |j+                   ||            d!k(  sJ |j+                   ||            d"k(  sJ |j+                   ||            d#k(  sJ |j+                   ||            d$k(  sJ |j+                  t.        dz        d%k(  sJ |j+                  t.        d&z        d'k(  sJ t7        ddd()      }|j+                  |      d*k(  sJ |j+                  t8        j:                        d+k(  sJ |j+                  t8        j<                        d,k(  sJ |j+                  t8        j>                        d-k(  sJ |j+                  t8        j@                        d.k(  sJ |j+                  t8        jB                        d/k(  sJ |j+                  t8        jD                        d0k(  sJ y )1Nr   )Lambda)Adjoint)
DiagMatrixDiagonalMatrix
DiagonalOf)FunctionMatrix)HadamardProduct)KroneckerProduct)	OneMatrix
ZeroMatrix)abznumpy.sign(x)Ar9   BCr:      Dr>      znumpy.linalg.inv(A)znumpy.linalg.matrix_power(A, 5)znumpy.eye(3)rE   rF   znumpy.linalg.solve(A, x)znumpy.linalg.solve(A, x) + yznumpy.zeros((2, 3))znumpy.ones((2, 3))z.numpy.fromfunction(lambda a, b: a + b, (4, 5))znumpy.multiply(A, B)znumpy.kron(A, B)z#numpy.conjugate(numpy.transpose(A))z%numpy.reshape(numpy.diag(A), (-1, 1))znumpy.diagflat(C)z"numpy.multiply(D, numpy.eye(3, 4))z	x**(-1.0)z	x**(-2.0)Fr?   z	2**(-1.0)numpy.eznumpy.piznumpy.euler_gammaz	numpy.nanz
numpy.PINFz
numpy.NINF)#sympy.core.functionr_   "sympy.matrices.expressions.adjointr`   #sympy.matrices.expressions.diagonalra   rb   rc   %sympy.matrices.expressions.funcmatrixrd   #sympy.matrices.expressions.hadamardre   $sympy.matrices.expressions.kroneckerrf   "sympy.matrices.expressions.specialrg   rh   	sympy.abcri   rj   r*   rD   r   rE   r#   r$   r   r   r   rV   rW   rY   rZ   r[   r\   )r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r7   rk   rl   rm   ro   uvexprs                       rI   test_NumPyPrinterr   _   sK   *:\\DCEJA99T!W000S!QAS!QAS!QAS!QA99QW!666699QT?????99Xa[!^333S!QAS!QA99[A&'+EEEE99[A&*+/MMMM99Z1%&*????99Yq!_%)====99^Aq&!QQ*?@A89 9 999_Q*+/EEEE99%a+,0BBBB99WQZ $IIII99Z]#'NNNN99Z]#'::::99^A&'+OOOO 99QU{***99QU{***q"u%D99T?k)))99QVV	)))99QTT?j(((99Q\\"&999999QUU{***99QZZ L00099Q''(L888rK   c                     t        d      } | st        d       ddlm}m} ddlm}  |dt        z  dz   t        dz   d	t        z  dz         } |t        |d      } || j                  ddd            g d
k(  j                         sJ  |d      dk(  sJ  |t        dz  t        dz        } |t        |d      } || j                  ddd            g dk(  j                         sJ  |d      dk(  sJ y )Nnumpyznumpy not installed.r   )r   r   )lambdifyg?r>   r:   g      ?)g      ?g      ?g      @rp   r9   rq   )r:   r   r:      @   )
r5   r-   (sympy.functions.elementary.miscellaneousr   r   sympy.utilities.lambdifyr   rE   linspaceall)r   r   r   r   expr1funcs         rI   test_issue_18770r      s    '"E#$C1A	1q5#a%!),EAug&D1a()->>CCEEEGqLL1adOEAeW%DAq)*l:@@BBB7b==rK   c                      t               } t        t              }d| j                  vsJ | j	                  |      dk(  sJ d| j                  v sJ t        d | j                  D              rJ t        ddddi      }| j	                  |      dk(  sJ d	| j                  v sJ | j	                  t        j                        d
k(  sJ | j	                  t        j                        dk(  sJ | j	                  t        j                        dk(  sJ y )Nr   znumpy.arccos(x)c              3   >   K   | ]  }|j                  d         yw)scipyN)
startswith).0ms     rI   	<genexpr>z$test_SciPyPrinter.<locals>.<genexpr>   s     CQ1<<(Cs   r9   rn   rA   r>   z8scipy.sparse.coo_matrix(([3], ([0], [1])), shape=(2, 5))zscipy.sparsezscipy.constants.golden_ratiozscipy.constants.pirs   )r+   r   rE   rC   rD   anyr"   r   rX   rW   rV   )r7   r~   smats      rI   test_SciPyPrinterr      s   A7D!*****99T?////a&&&&&C!2B2BCCCC1vqk*D99T?BC C CQ-----99Q]]#'EEEE99QTT?222299QVV	)))rK   c                  t    t        d      \  t        t        fd       t        z         } | dv sJ y )Nzif elsec                  $    t         z   d      S )NT)error_on_reserved)r'   )s1s2s   rI   rR   z,test_pycode_reserved_words.<locals>.<lambda>   s    vb2gF rK   )zelse_ + if_zif_ + else_)r   r,   rS   r'   )py_strr   r   s    @@rI   test_pycode_reserved_wordsr      s8    YFB
:FGBG_F3333rK   c                  v    t        d      \  } }}| |z  }t        |      dk(  sJ ||z  }t        |      dk(  sJ y )Nza_{b} b a_{11}za_b*bza_11*b)r   r'   )a_brj   a_11r~   s       rI   test_issue_20762r      sI    +,LCDq5D$<7"""6D$<8###rK   c                     t               } | j                  t        t              d      dk(  sJ | j                  dt        t              z  d      dk(  sJ t        ddi      } | j                  t        t              d      d	k(  sJ | j                  dt        t              z  d      d
k(  sJ t	               } | j                  t        t              d      dk(  sJ | j                  t        t              d      dk(  sJ t               } | j                  t        t              d      dk(  sJ | j                  t        t              d      d	k(  sJ t               } | j                  t        t              d      dk(  sJ | j                  t        t              d      d	k(  sJ t               } | j                  t        t              d      dk(  sJ | j                  t        t              d      d	k(  sJ y )NF)rationalr<   r:   z1/math.sqrt(x)rO   rM   Tzx**(1/2)z	x**(-1/2)zmpmath.sqrt(x)z x**(mpmath.mpf(1)/mpmath.mpf(2))znumpy.sqrt(x)zsympy.sqrt(x))r&   
_print_Powr   rE   r%   r*   r+   r(   rG   s    rI   	test_sqrtr      s   EDGe4FFFAd1gI6:JJJJzI67EDGd3zAAAAd1gI5DDDOEDGe48HHHHDGd3*+ + + NEDGe4GGGDGd3zAAANEDGe4GGGDGd3zAAANEDGe4GGGDGd3zAAArK   c                  h   ddl m}   | t              }t               }|j	                  |      dk(  sJ t               }|j	                  |      dk(  sJ t               }|j	                  |      dk(  sJ t               }|j	                  |      dk(  sJ t               }|j	                  |      dk(  sJ y )Nr   )fracznumpy.mod(x, 1)zx % 1zmpmath.frac(x)z+sympy.functions.elementary.integers.frac(x))	#sympy.functions.elementary.integersr   rE   r*   rD   r+   r&   r%   r(   )r   r~   rH   s      rI   	test_fracr      s    87DNE=="3333NE=="3333E==')))OE=="2222NE=="OOOOrK   c                       e Zd Zd Zd Zy)CustomPrintedObjectc                      y)Nr   rQ   selfprinters     rI   
_numpycodezCustomPrintedObject._numpycode   s    rK   c                      y)NmpmathrQ   r   s     rI   _mpmathcodezCustomPrintedObject._mpmathcode   s    rK   N)__name__
__module____qualname__r   r   rQ   rK   rI   r   r      s    rK   r   c                      t               } t               j                  |       dk(  sJ t               j                  |       dk(  sJ y )Nr   r   )r   r*   rD   r%   )objs    rI   test_printmethodr      s@    

C>!!#&'111?""3'8333rK   c                  ,    t        t              dk(  sJ y )NNone)r'   r   rQ   rK   rI   test_codegen_ast_nodesr     s    $<6!!!rK   c                      t               } | j                  t              dk(  sJ | j                  t               dk(  sJ y )Nzmath.nanzfloat('-inf'))r&   rD   r   r   rG   s    rI   test_issue_14283r     s:    E==+++=="000rK   c                  V    t               } | j                  t        d            dk(  sJ y )Nr9   z(0, 1,))r*   
_print_seqrange)ns    rI   test_NumPyPrinter_print_seqr     s$    A<<a!Y...rK   c                     ddl m} m} t        d      } | |t              } ||t              }t               }|j                  |      dk(  sJ |j                  |      dk(  sJ t               }d|j                  |      v sJ d|j                  |      v sJ t               }d|j                  |      v sJ d|j                  |      v sJ y )Nr   )
lowergamma
uppergammari   z3scipy.special.gamma(a)*scipy.special.gammainc(a, x)z4scipy.special.gamma(a)*scipy.special.gammaincc(a, x)Not supported)	'sympy.functions.special.gamma_functionsr   r   r   rE   r+   rD   r*   r&   )r   r   ri   r   expr2rH   s         rI   test_issue_16535_16536r     s    PAq!Eq!ENE==#XXXX==#YYYYNEemmE2222emmE2222EemmE2222emmE2222rK   c                     ddl m}  ddlm}  | | t               t        dt
        f      } |t        dz   | t        t        z        z  t        t         t        ft        dt        f      } |t        dz  t               |t        dz  t        df      t               j                  |      dk(  sJ j                  |      dk(  sJ t        t        fd       t        t        fd	       t               j                  |      d
k(  sJ j                  |      dk(  sJ t        t        fd       t        t        fd       y )Nr   )exp)Integralr9   r:   z?scipy.integrate.quad(lambda x: numpy.exp(-x), 0, numpy.PINF)[0]zMscipy.integrate.nquad(lambda x, y: x**2*numpy.exp(x*y), ((-z, z), (0, z)))[0]c                  &    j                         S NrD   
indefiniterH   s   rI   rR   ztest_Integral.<locals>.<lambda>3      j(A rK   c                  &    j                         S r   r   
evaluateatrH   s   rI   rR   ztest_Integral.<locals>.<lambda>4  r   rK   z6mpmath.quad(lambda x: mpmath.exp(-x), (0, mpmath.inf))z?mpmath.quad(lambda x, y: x**2*mpmath.exp(x*y), (-z, z), (0, z))c                  &    j                         S r   r   r   s   rI   rR   ztest_Integral.<locals>.<lambda>9  r   rK   c                  &    j                         S r   r   r   s   rI   rR   ztest_Integral.<locals>.<lambda>:  r   rK   )&sympy.functions.elementary.exponentialr   sympy.integrals.integralsr   rE   r   rF   zr+   rD   r,   NotImplementedErrorr%   )r   r   singledoubler   r   rH   s       @@@rI   test_Integralr   '  s   :2c1"g1bz*Fad3qs8ma!QZ!Q;F!Q$"J!Q$A'JNE== $eeee== $ssss
 AB
 ABOE== $\\\\== $eeee
 AB
 ABrK   c                     ddl m} m}  | t              } |t              }t	               }|j                  |      dk(  sJ |j                  |      dk(  sJ t               }d|j                  |      v sJ d|j                  |      v sJ t               }d|j                  |      v sJ d|j                  |      v sJ t               }|j                  |      dk(  sJ |j                  |      dk(  sJ y )Nr   )fresnelcfresnelszscipy.special.fresnel(x)[1]zscipy.special.fresnel(x)[0]r   zmpmath.fresnelc(x)zmpmath.fresnels(x))	'sympy.functions.special.error_functionsr   r   rE   r+   rD   r*   r&   r%   )r   r   r   r   rH   s        rI   test_fresnel_integralsr   =  s    LQKEQKENE==#@@@@==#@@@@NEemmE2222emmE2222EemmE2222emmE2222OE==#7777==#7777rK   c                  x   ddl m}   | t        t              }t	               }|j                  |      dk(  sJ t               }|j                  |      dk(  sJ t               }|j                  |      dk(  sJ t        ddi      }|j                  |      dk(  sJ t               }|j                  |      dk(  sJ y )Nr   )betazscipy.special.beta(x, y)z-math.gamma(x)*math.gamma(y)/math.gamma(x + y)allow_unknown_functionsTzmpmath.beta(x, y))	&sympy.functions.special.beta_functionsr   rE   rF   r+   rD   r*   r&   r%   )r   r~   rH   s      rI   	test_betar   T  s    ;1:DNE=="<<<<NE=="QQQQE=="QQQQ8$?@E=="QQQQOE==#6666rK   c                     ddl m} m}  | t              } |t              }t	               }|j                  |      dk(  sJ |j                  |      dk(  sJ t               }d|j                  |      v sJ d|j                  |      v sJ t               }d|j                  |      v sJ d|j                  |      v sJ y )Nr   )airyaiairybizscipy.special.airy(x)[0]zscipy.special.airy(x)[2]r   )sympy.functions.special.besselr   r   rE   r+   rD   r*   r&   )r   r   r   r   rH   s        rI   	test_airyr   h  s    ?1IE1IENE==#======#====NEemmE2222emmE2222EemmE2222emmE2222rK   c                     ddl m} m}  | t              } |t              }t	               }|j                  |      dk(  sJ |j                  |      dk(  sJ t               }d|j                  |      v sJ d|j                  |      v sJ t               }d|j                  |      v sJ d|j                  |      v sJ y )Nr   )airyaiprimeairybiprimezscipy.special.airy(x)[1]zscipy.special.airy(x)[3]r   )r   r   r   rE   r+   rD   r*   r&   )r   r   r   r   rH   s        rI   test_airy_primer   z  s    INENENE==#======#====NEemmE2222emmE2222EemmE2222emmE2222rK   c                      t               } | j                  t        t                    dk(  sJ | j                  t	        t                    dk(  sJ | j                  t        t                    dk(  sJ y )Nznumpy.expm1(x)znumpy.log1p(x)zscipy.special.cosm1(x))r+   rD   r   rE   r   r   rG   s    rI   !test_numerical_accuracy_functionsr     s]    NE==q"&6666==q"&6666==q"&>>>>rK   c            	         t        dd      } t        d      }t        dd      t        dd      t        dd	      }}}t               }|j	                  t        d
            dk(  sJ |j	                  t        d
            dk(  sJ |j	                  t        | ddg            dk(  sJ |j	                  |      dk(  sJ |j	                  t        | g d            dk(  sJ |j	                  t        | ddgddg            dk(  sJ |j	                  t        | dgdg            dk(  sJ |j	                  t        ||||f   ||||f               dk(  sJ t               }|j	                  t        d
            dk(  sJ |j	                  t        d
            dk(  sJ |j	                  t        | ddg            dk(  sJ |j	                  |      dk(  sJ |j	                  t        | g d            dk(  sJ |j	                  t        | ddgddg            dk(  sJ |j	                  t        | dgdg            dk(  sJ |j	                  t        ||||f   ||||f               dk(  sJ y )Nrk   )rp   rp   r=   r=   r=   IirA   jrB   k)rp   rn   rn   znumpy.zeros((5,))znumpy.ones((5,))r9   r>   znumpy.einsum("abccd->abd", A))r9   r>   rp   znumpy.einsum("abccc->abc", A)r   r:   znumpy.einsum("aabbc->cab", A)znumpy.einsum("abcde->abe", A)zI = Iztensorflow.zeros((5,))ztensorflow.ones((5,))z)tensorflow.linalg.einsum("abccd->abd", A)z)tensorflow.linalg.einsum("abccc->abc", A)z)tensorflow.linalg.einsum("aabbc->cab", A)z)tensorflow.linalg.einsum("abcde->abe", A))r0   r.   r/   r*   rD   r3   r4   r2   r1   r   r)   )rk   r   r   r   r   rH   s         rI   test_array_printerr     sl   C%ACAUOSe_c#uoaANE==1&*======!%);;;;==)!aU348WWWW==s"""==q'237VVVV==q1Q%!A78<[[[[==)!aS1#67;ZZZZ==Aa!eHa!Ah78GCCCE==1&*BBBB==!%)@@@@==)!aU348cccc==s"""==q'237bbbb==q1Q%!A78<gggg==)!aS1#67;ffff==Aa!eHa!Ah78GCCCrK   N)bsympy.codegenr   sympy.codegen.astr   sympy.codegen.cfunctionsr   r   sympy.codegen.scipy_nodesr   sympy.codegen.matrix_nodesr   
sympy.corer	   r
   r   r   r   r   r   r   r   r   sympy.core.numbersr   sympy.core.singletonr   sympy.functionsr   r   r   r   r   r   r   r   r   r   r   sympy.logicr    r!   sympy.matricesr"   r#   r$   sympy.printing.pycoder%   r&   r'   r(   sympy.printing.tensorflowr)   sympy.printing.numpyr*   r+   sympy.testing.pytestr,   r-   sympy.tensorr.   r/   0sympy.tensor.array.expressions.array_expressionsr0   r1   r2   r3   r4   sympy.externalr5   r   r6   rE   rF   r   r7   rJ   rT   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   rK   rI   <module>r     s    $ " 1 + 2 M M M ! " i i i i  ? ?  8 ; - ) ~ ~ ( < '
1a)3XJ:/9d&*"4$B6P($ 4"1/3(C,8.7(3$3&?DrK   