U
    ZÊ¹jÆ>  ã                   @   sF  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%m&Z& d d
l'm(Z(m)Z) d dl*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZE d dlFmGZG edƒ\ZHZIZJe<dƒZKdd„ ZLdd„ ZMdd„ ZNdd„ ZOdd„ ZPd d!„ ZQd"d#„ ZRd$d%„ ZSd&d'„ ZTd(d)„ ZUG d*d+„ d+eƒZVd,d-„ ZWd.d/„ ZXd0d1„ ZYd2d3„ ZZd4d5„ Z[d6d7„ Z\d8d9„ Z]d:d;„ Z^d<d=„ Z_d>d?„ Z`d@dA„ ZadBdC„ ZbdDS )Eé    )Ú
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Úsec)Ú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                  C   sØ  t ƒ } | jrt‚|  tt ¡dks&t‚|  ttdƒ¡dks>t‚|  tttƒ ¡dksXt‚|  tt tƒ¡dksrt‚|  tttƒ¡dksŠt‚|  tttƒ¡dks¢t‚|  dtt  ¡d	ks¼t‚| jrÆt‚|  t	¡d
ksØt‚| jddhiksìt‚|  tt
ddƒ ¡dk�s
t‚|  ttƒ¡dk�s"t‚| jdddhik�s:t‚|  ttƒ¡dk�sRt‚|  ttƒ¡dk�sjt‚|  ttƒ¡dk�s‚t‚|  ttƒ¡dk�sšt‚|  ttƒ¡dk�s²t‚|  ttdƒ¡dk�sÌt‚|  tdttdƒfdtdkfƒ¡dk�søt‚|  tdttdƒfdttdƒfdd�¡dk�s*t‚|  ttƒ¡dk�sBt‚|  td ¡dk�sZt‚|  tttƒ¡dk�stt‚|  d ¡d!k�sˆt‚|  ddg¡d"k�s t‚|  tttƒ¡d#k�sºt‚|  tttƒ¡d$k�sÔt‚d S )%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))z;((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   r9   zp[0, 1]z(1 if x == y else 0)©r8   r=   z(2, 3)z[2, 3]z	min(x, y)z	max(x, y))r&   Úmodule_importsÚAssertionErrorÚdoprintÚxÚyr	   r    r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   ©Úprntr© rI   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_pycode.pyÚtest_PythonCodePrinter   sN    


ÿÿ
 ÿÿ
rK   c                  C   s&   t ƒ } | jdkst‚ttdd„ ƒ d S )NÚpython3c                   S   s   t ddiƒS )NÚstandardZpython4)r&   rI   rI   rI   rJ   Ú<lambda>M   ó    z1test_PythonCodePrinter_standard.<locals>.<lambda>)r&   rM   rC   r,   Ú
ValueErrorrG   rI   rI   rJ   Útest_PythonCodePrinter_standardH   s    rQ   c                  C   sÚ   t ƒ } |  ttƒ¡dkst‚|  tddƒ¡dks4t‚|  tj¡dksHt‚|  tj¡dks\t‚|  tj	¡dkspt‚|  tj
¡dks„t‚|  tj¡d	ks˜t‚|  tj¡d
ks¬t‚|  tj¡dksÀt‚|  ttƒ¡dksÖt‚d S )Nzmpmath.sign(x)r9   r8   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   rC   r   r   ÚExp1ÚPiÚGoldenRatioÚ
EulerGammaÚNaNÚInfinityÚNegativeInfinityr6   )r7   rI   rI   rJ   Útest_MpmathPrinterP   s    rY   c               	   C   s6  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ƒ }| ttƒ¡d
ksŒt‚tdddƒ}tdddƒ}tdddƒ}tdddƒ}| |d ¡dksÒt‚| |d ¡dksèt‚| tdƒ¡dksþt‚tdddƒ}tdddƒ}| t||ƒ¡dk�s0t‚| t||ƒ| ¡dk�sNt‚| |	ddƒ¡dk�sht‚| |ddƒ¡dk�s‚t‚| |dd| |
|f|
| ƒƒ¡dk�s¬t‚| |||ƒ¡dk�sÆt‚| |||ƒ¡d k�sàt‚| ||ƒ¡d!k�søt‚| ||ƒ¡d"k�st‚| ||ƒ¡d#k�s(t‚| ||ƒ¡d$k�s@t‚| td ¡d%k�sXt‚| td& ¡d'k�spt‚tddd(d)�}| |¡d*k�s’t‚| tj¡d+k�s¨t‚| tj¡d,k�s¾t‚| tj ¡d-k�sÔt‚| tj!¡d.k�sêt‚| tj"¡d/k�s t‚| tj#¡d0k�st‚| t$tƒd ¡d1k�s2t‚d S )2Nr   )ÚLambda)ÚAdjoint)Ú
DiagMatrixÚDiagonalMatrixÚ
DiagonalOf)ÚFunctionMatrix)ÚHadamardProduct)ÚKroneckerProduct)Ú	OneMatrixÚ
ZeroMatrix)ÚaÚbznumpy.sign(x)ÚAr8   ÚBÚCr9   é   Ú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.infz
-numpy.infz(numpy.cos(x)**(-1.0))**2)%Zsympy.core.functionrZ   Z"sympy.matrices.expressions.adjointr[   Z#sympy.matrices.expressions.diagonalr\   r]   r^   Z%sympy.matrices.expressions.funcmatrixr_   Z#sympy.matrices.expressions.hadamardr`   Z$sympy.matrices.expressions.kroneckerra   Z"sympy.matrices.expressions.specialrb   rc   Z	sympy.abcrd   re   r*   rD   r   rE   rC   r#   r$   r   r   r   rR   rS   rU   rV   rW   rX   r   )rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   r7   rf   rg   rh   rj   ÚuÚvÚexprrI   rI   rJ   Útest_NumPyPrinter_   sV    ÿ
rr   c                  C   sè   t dƒ} | stdƒ ddlm}m} ddlm} |dt d td d	t d ƒ}|t|dƒ}||  ddd¡ƒd
ddgk 	¡ s€t
‚|dƒdks�t
‚|td td ƒ}|t|dƒ}||  ddd¡ƒddddgk 	¡ sÔt
‚|dƒdksät
‚d S )NÚnumpyznumpy not installed.r   )r   r   )Úlambdifygš™™™™™¹?r=   r9   g      à?g      ð?g      ü?g      @rk   r8   rl   é   é@   )r5   r-   Z(sympy.functions.elementary.miscellaneousr   r   Zsympy.utilities.lambdifyrt   rE   ZlinspaceÚallrC   )rs   r   r   rt   Úexpr1ÚfuncrI   rI   rJ   Útest_issue_18770”   s     $&rz   c                  C   sÄ   t ƒ } ttƒ}d| jkst‚|  |¡dks.t‚d| jks<t‚tdd„ | jD ƒƒrTt‚tddddiƒ}|  |¡d	ksvt‚d
| jks„t‚|  tj	¡dks˜t‚|  tj
¡dks¬t‚|  tj¡dksÀt‚d S )Nrs   znumpy.arccos(x)c                 s   s   | ]}|  d ¡V  qdS )ZscipyN)Ú
startswith)Ú.0ÚmrI   rI   rJ   Ú	<genexpr>­   s     z$test_SciPyPrinter.<locals>.<genexpr>r8   ri   r@   r=   z8scipy.sparse.coo_matrix(([3], ([0], [1])), shape=(2, 5))zscipy.sparsezscipy.constants.golden_ratiozscipy.constants.pirn   )r+   r   rE   rB   rC   rD   Úanyr"   r   rT   rS   rR   )r7   rq   ZsmatrI   rI   rJ   Útest_SciPyPrinter§   s    ÿr€   c                     s<   t dƒ\‰ ‰tt‡ ‡fdd„ƒ tˆ ˆ ƒ} | dks8t‚d S )Nzif elsec                      s   t ˆ ˆ dd�S )NT)Zerror_on_reserved)r'   rI   ©Ús1Ús2rI   rJ   rN   º   rO   z,test_pycode_reserved_words.<locals>.<lambda>)zelse_ + if_zif_ + else_)r
   r,   rP   r'   rC   )Zpy_strrI   r�   rJ   Útest_pycode_reserved_words¸   s    r„   c                  C   sB   t dƒ\} }}| | }t|ƒdks&t‚|| }t|ƒdks>t‚d S )Nza_{b} b a_{11}za_b*bza_11*b)r
   r'   rC   )Za_bre   Za_11rq   rI   rI   rJ   Útest_issue_20762¿   s
    r…   c                  C   sv  t ƒ } | jttƒdd�dks t‚| jdttƒ dd�dks>t‚t ddiƒ} | jttƒdd�d	ksdt‚| jdttƒ dd�d
ks‚t‚tƒ } | jttƒdd�dks¢t‚| jttƒdd�dks¼t‚tƒ } | jttƒdd�dksÜt‚| jttƒdd�d	ksöt‚tƒ } | jttƒdd�dk�st‚| jttƒdd�d	k�s4t‚tƒ } | jttƒdd�dk�sVt‚| jttƒdd�d	k�srt‚d S )NF)Zrationalr;   r9   z1/math.sqrt(x)rM   rL   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&   Z
_print_Powr   rE   rC   r%   r*   r+   r(   rG   rI   rI   rJ   Ú	test_sqrtÈ   s(    ÿr†   c                  C   s�   ddl m}  | tƒ}tƒ }| |¡dks,t‚tƒ }| |¡dksDt‚tƒ }| |¡dks\t‚tƒ }| |¡dkstt‚t	ƒ }| |¡dksŒt‚d S )Nr   )Úfracznumpy.mod(x, 1)zx % 1zmpmath.frac(x)z+sympy.functions.elementary.integers.frac(x))
Z#sympy.functions.elementary.integersr‡   rE   r*   rD   rC   r+   r&   r%   r(   )r‡   rq   rH   rI   rI   rJ   Ú	test_fracã   s    rˆ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCustomPrintedObjectc                 C   s   dS )Nrs   rI   ©ÚselfÚprinterrI   rI   rJ   Ú
_numpycodeø   s    zCustomPrintedObject._numpycodec                 C   s   dS )NÚmpmathrI   rŠ   rI   rI   rJ   Ú_mpmathcodeû   s    zCustomPrintedObject._mpmathcodeN)Ú__name__Ú
__module__Ú__qualname__r�   r�   rI   rI   rI   rJ   r‰   ÷   s   r‰   c                  C   s2   t ƒ } tƒ  | ¡dkst‚tƒ  | ¡dks.t‚d S )Nrs   rŽ   )r‰   r*   rD   rC   r%   )ÚobjrI   rI   rJ   Útest_printmethodÿ   s    r”   c                   C   s   t tƒdkst‚d S )NÚNone)r'   r   rC   rI   rI   rI   rJ   Útest_codegen_ast_nodes  s    r–   c                  C   s0   t ƒ } |  t¡dkst‚|  t ¡dks,t‚d S )Nzmath.nanzfloat('-inf'))r&   rD   r   rC   r   rG   rI   rI   rJ   Útest_issue_14283	  s    r—   c                  C   s    t ƒ } |  tdƒ¡dkst‚d S )Nr8   z(0, 1,))r*   Z
_print_seqÚrangerC   )ÚnrI   rI   rJ   Útest_NumPyPrinter_print_seq  s    rš   c            	   
   C   sª   ddl m} m} tdƒ}| |tƒ}||tƒ}tƒ }| |¡dksDt‚| |¡dksVt‚tƒ }t	ddiƒ}||fD ]4}t
tƒ� | |¡ W 5 Q R X d| |¡kspt‚qpd S )	Nr   )Ú
lowergammaÚ
uppergammard   z3scipy.special.gamma(a)*scipy.special.gammainc(a, x)z4scipy.special.gamma(a)*scipy.special.gammaincc(a, x)ÚstrictFúNot supported)Ú'sympy.functions.special.gamma_functionsr›   rœ   r
   rE   r+   rD   rC   r*   r&   r,   ÚNotImplementedError)	r›   rœ   rd   rx   Úexpr2rH   Úp_numpyÚp_pycoderq   rI   rI   rJ   Útest_issue_16535_16536  s    


r¤   c                     s   ddl m}  ddlm} || t ƒtdtfƒ}|td | tt ƒ tt tftdtfƒ}|td tƒ‰|td tdfƒ‰ tƒ ‰ˆ 	|¡dks�t
‚ˆ 	|¡dks¢t
‚tt‡‡fdd	„ƒ tt‡ ‡fd
d	„ƒ tƒ ‰ˆ 	|¡dksât
‚ˆ 	|¡dksôt
‚tt‡‡fdd	„ƒ tt‡ ‡fdd	„ƒ d S )Nr   )Úexp)ÚIntegralr8   r9   z>scipy.integrate.quad(lambda x: numpy.exp(-x), 0, numpy.inf)[0]zMscipy.integrate.nquad(lambda x, y: x**2*numpy.exp(x*y), ((-z, z), (0, z)))[0]c                      s
   ˆ  ˆ ¡S ©N©rD   rI   ©Ú
indefiniterH   rI   rJ   rN   6  rO   ztest_Integral.<locals>.<lambda>c                      s
   ˆ  ˆ ¡S r§   r¨   rI   ©Ú
evaluateatrH   rI   rJ   rN   7  rO   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                      s
   ˆ  ˆ ¡S r§   r¨   rI   r©   rI   rJ   rN   <  rO   c                      s
   ˆ  ˆ ¡S r§   r¨   rI   r«   rI   rJ   rN   =  rO   )Z&sympy.functions.elementary.exponentialr¥   Zsympy.integrals.integralsr¦   rE   r   rF   Úzr+   rD   rC   r,   r    r%   )r¥   r¦   ZsingleÚdoublerI   )r¬   rª   rH   rJ   Útest_Integral*  s     *r¯   c            	   
   C   sÎ   ddl m} m} | tƒ}|tƒ}tƒ }| |¡dks8t‚| |¡dksJt‚tƒ }tƒ }t	ƒ }||fD ]@}t
tƒ� | |¡ W 5 Q R X t
tƒ� | |¡ W 5 Q R X qd| |¡dks¸t‚| |¡dksÊt‚d S )Nr   )ÚfresnelcÚfresnelszscipy.special.fresnel(x)[1]zscipy.special.fresnel(x)[0]zmpmath.fresnelc(x)zmpmath.fresnels(x))Z'sympy.functions.special.error_functionsr°   r±   rE   r+   rD   rC   r*   r&   r%   r,   r    )	r°   r±   rx   r¡   rH   r¢   r£   Zp_mpmathrq   rI   rI   rJ   Útest_fresnel_integrals@  s     

r²   c                  C   s˜   ddl m}  | ttƒ}tƒ }| |¡dks.t‚tƒ }| |¡dksFt‚tƒ }| |¡dks^t‚tddiƒ}| |¡dks|t‚t	ƒ }| |¡dks”t‚d S )Nr   )Úbetazscipy.special.beta(x, y)z/(math.gamma(x)*math.gamma(y)/math.gamma(x + y))Zallow_unknown_functionsTzmpmath.beta(x, y))
Z&sympy.functions.special.beta_functionsr³   rE   rF   r+   rD   rC   r*   r&   r%   )r³   rq   rH   rI   rI   rJ   Ú	test_betaW  s    
r´   c                  C   s®   ddl m} m} | tƒ}|tƒ}tƒ }| |¡dks8t‚| |¡dksJt‚tddiƒ}d| |¡ksht‚d| |¡kszt‚tddiƒ}d| |¡ks˜t‚d| |¡ksªt‚d S )Nr   )ÚairyaiÚairybizscipy.special.airy(x)[0]zscipy.special.airy(x)[2]r�   Frž   )	Úsympy.functions.special.besselrµ   r¶   rE   r+   rD   rC   r*   r&   )rµ   r¶   rx   r¡   rH   rI   rI   rJ   Ú	test_airyk  s    r¸   c                  C   s®   ddl m} m} | tƒ}|tƒ}tƒ }| |¡dks8t‚| |¡dksJt‚tddiƒ}d| |¡ksht‚d| |¡kszt‚tddiƒ}d| |¡ks˜t‚d| |¡ksªt‚d S )Nr   )ÚairyaiprimeÚairybiprimezscipy.special.airy(x)[1]zscipy.special.airy(x)[3]r�   Frž   )	r·   r¹   rº   rE   r+   rD   rC   r*   r&   )r¹   rº   rx   r¡   rH   rI   rI   rJ   Útest_airy_prime}  s    r»   c                  C   sL   t ƒ } |  ttƒ¡dkst‚|  ttƒ¡dks2t‚|  ttƒ¡dksHt‚d S )Nznumpy.expm1(x)znumpy.log1p(x)zscipy.special.cosm1(x))r+   rD   r   rE   rC   r   r   rG   rI   rI   rJ   Ú!test_numerical_accuracy_functions�  s    r¼   c                  C   s  t ddƒ} tdƒ}tddƒtddƒtdd	ƒ  }}}tƒ }| td
ƒ¡dksPt‚| td
ƒ¡dksft‚| t| ddgƒ¡dks‚t‚| |¡dks”t‚| t	| dddgƒ¡dks²t‚| t	| ddgddgƒ¡dksÔt‚| t| dgdgƒ¡dksòt‚| t
||||f ||||f ƒ¡dk�s t‚tƒ }| td
ƒ¡dk�s>t‚| td
ƒ¡dk�sVt‚| t| ddgƒ¡dk�stt‚| |¡dk�sˆt‚| t	| dddgƒ¡dk�s¨t‚| t	| ddgddgƒ¡dk�sÌt‚| t| dgdgƒ¡dk�sìt‚| t
||||f ||||f ƒ¡dk�st‚d S )Nrf   )rk   rk   r<   r<   r<   ÚIÚir@   ÚjrA   Úk)rk   ri   ri   znumpy.zeros((5,))znumpy.ones((5,))r8   r=   znumpy.einsum("abccd->abd", A)rk   znumpy.einsum("abccc->abc", A)r   r9   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   rC   r4   r2   r1   r   r)   )rf   r½   r¾   r¿   rÀ   rH   rI   rI   rJ   Útest_array_printer–  s*    
"". $ rÁ   N)cZsympy.codegenr   Zsympy.codegen.astr   Zsympy.codegen.cfunctionsr   r   Zsympy.codegen.scipy_nodesr   Zsympy.codegen.matrix_nodesr   Z
sympy.corer   r	   r
   r   r   r   r   r   r   r   Zsympy.core.numbersr   Zsympy.core.singletonr   Zsympy.functionsr   r   r   r   r   r   r   r   r   r   r   r   Zsympy.logicr    r!   Zsympy.matricesr"   r#   r$   Zsympy.printing.pycoder%   r&   r'   r(   Zsympy.printing.tensorflowr)   Zsympy.printing.numpyr*   r+   Zsympy.testing.pytestr,   r-   Zsympy.tensorr.   r/   Z0sympy.tensor.array.expressions.array_expressionsr0   r1   r2   r3   r4   Zsympy.externalr5   rŸ   r6   rE   rF   r­   r7   rK   rQ   rY   rr   rz   r€   r„   r…   r†   rˆ   r‰   r”   r–   r—   rš   r¤   r¯   r²   r´   r¸   r»   r¼   rÁ   rI   rI   rI   rJ   Ú<module>   sV   08,5	