U
    ZÊ¹j›*  ã                   @   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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 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/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZFmGZG d dlHmIZI eIdƒZJeIdƒZKeJ�r¶eJ LeJ Mg ¡jN¡ZOeOjPZQdd„ ZRdd„ ZSdd „ ZTd!d"„ ZUd#d$„ ZVd%d&„ ZWd'd(„ ZXd)d*„ ZYd+d,„ ZZd-d.„ Z[d/d0„ Z\d1d2„ Z]d3d4„ Z^d5d6„ Z_d7d8„ Z`d9d:„ Zad;d<„ Zbd=d>„ Zcd?d@„ ZddAdB„ ZedCdD„ ZfdEdF„ ZgdGdH„ ZhdIdJ„ ZidKdL„ ZjdMdN„ ZkdOS )Pé    )ÚSum)ÚMod)ÚEqualityÚ
Unequality)ÚSymbol)Úsqrt)Ú	Piecewise)Ú	polygamma)ÚSiÚCi)ÚBlockMatrix)ÚMatrixSymbol)ÚIdentity)Úlambdify)ÚsymbolsÚMinÚMax)ÚxÚiÚjÚaÚbÚcÚd)ÚPow)ÚMatrixSolve)Ú	logaddexpÚ
logaddexp2)Úlog1pÚexpm1ÚhypotÚlog10Úexp2Úlog2ÚSqrt)ÚArray)ÚArrayTensorProductÚArrayAddÚPermuteDimsÚArrayDiagonal)ÚNumPyPrinterÚSciPyPrinterÚ_numpy_known_constantsÚ_numpy_known_functionsÚ_scipy_known_constantsÚ_scipy_known_functions)Úconvert_matrix_to_array)ÚskipÚraises)Úimport_moduleÚnumpyÚjaxc                  C   sF   t ƒ } tdtdk fdƒ}|  |¡dks*t‚| jddddhiksBt‚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   Tz?numpy.select([numpy.less(x, 0),True], [1,0], default=numpy.nan)r4   ÚselectÚlessÚnanN)r*   r   r   ÚdoprintÚAssertionErrorZmodule_imports)ÚprinterÚp© r>   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_numpy.pyÚtest_numpy_piecewise_regression%   s    ÿr@   c                  C   s@   t ttƒ} tƒ  | ¡dkst‚tttƒ}tƒ  |¡dks<t‚d S )Nznumpy.logaddexp(a, b)znumpy.logaddexp2(a, b))r   r   r   r*   r:   r;   r   )ZlaeZlae2r>   r>   r?   Útest_numpy_logaddexp1   s    

rA   c               	      sð   t stdƒ ttt tttfƒ} ttttf| dƒ}d\}}t  ddd¡‰ t  	|||ˆ ƒt
‡ fdd„t||d ƒD ƒƒ¡s|t‚ttt tttfƒ} ttttf| dƒ}d\}}t  ddd¡‰ t  	|||ˆ ƒt
‡ fd	d„t||d ƒD ƒƒ¡sìt‚d S )
NúNumPy not installedr4   ©r   é
   éÿÿÿÿr6   rD   c                 3   s   | ]}ˆ | V  qd S ©Nr>   ©Ú.0Úi_©Úx_r>   r?   Ú	<genexpr>A   s     ztest_sum.<locals>.<genexpr>c                 3   s   | ]}|ˆ  V  qd S rF   r>   rG   rJ   r>   r?   rL   H   s     )Únpr1   r   r   r   r   r   r   ÚlinspaceÚallcloseÚsumÚranger;   ©ÚsÚfÚa_Úb_r>   rJ   r?   Útest_sum8   s    4rW   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  ddd¡‰t  |||ˆ ˆˆƒt‡ ‡‡fdd	„t||d ƒD ƒƒ¡sœt‚d S )
NrB   r4   rC   )é   é   rE   r6   rD   c                 3   s.   | ]&}t ˆ ˆd  ƒD ]}ˆ| | V  qqdS )r6   N)rQ   )rH   rI   Zj_©Zc_Zd_rK   r>   r?   rL   V   s       z%test_multiple_sums.<locals>.<genexpr>)rM   r1   r   r   r   r   r   r   r   r   r   rN   rO   rP   rQ   r;   rR   r>   rZ   r?   Útest_multiple_sumsK   s     "ÿr[   c                  C   sŽ   t stdƒ tdddƒ} tdddƒ}t| | ƒ}t| |f|dƒ}t  ddgddgg¡}t  dd	gd
dgg¡}|||ƒt  ||¡k ¡ sŠt‚d S )NrB   ÚMé   ÚNr4   r6   é   é   éþÿÿÿrE   )	rM   r1   r   r0   r   ÚarrayÚmatmulÚallr;   )r\   r^   ÚcgrT   ÚmaÚmbr>   r>   r?   Útest_codegen_einsumY   s    rh   c            
   
   C   s„  t stdƒ tdddƒ} tdddƒ}tdddƒ}tdddƒ}t  ddgdd	gg¡}t  dd
gddgg¡}t  ddgddgg¡}t  ddgd	dgg¡}t| |ƒ}t| |f|dƒ}	|	||ƒt  |ddg|ddg¡k ¡ sØt‚t	| |ƒ}t| |f|dƒ}	|	||ƒ|| k ¡ �st‚t	| ||ƒ}t| ||f|dƒ}	|	|||ƒ|| | k ¡ �sNt‚t	| |||ƒ}t| |||f|dƒ}	|	||||ƒ|| | | k ¡ �s˜t‚t
| ddgƒ}t| f|dƒ}	|	|ƒ|jk ¡ �sÌt‚t
t| |ƒddddgƒ}t| |f|dƒ}	|	||ƒt  t  |ddg|ddg¡d¡k ¡ �s(t‚tt| |ƒdƒ}t| |f|dƒ}	|	||ƒt jt  |ddg|ddg¡ddd�k ¡ �s€t‚d S )NrB   r\   r]   r^   ÚPÚQr6   r_   r`   ra   rE   r   é   r4   )r6   r]   r_   r   ©r6   r]   )Zaxis1Zaxis2)rM   r1   r   rb   r&   r   Zeinsumrd   r;   r'   r(   ÚTZ	transposer)   Zdiagonal)
r\   r^   ri   rj   rf   rg   ZmcÚmdre   rT   r>   r>   r?   Útest_codegen_extrah   s>    
*
"(4ro   c                  C   sŽ  t stdƒ ttdƒ} ttf| ƒ}t  dddg¡}t  ||ƒdddg¡sLt‚ttdƒ} ttf| ƒ}t  dddg¡}t  ||ƒdddg¡sŒt‚tdk } ttf| ƒ}t  dddg¡}t  ||ƒdddg¡sÊt‚tdk} ttf| ƒ}t  dddg¡}t  ||ƒdddg¡�s
t‚tdk} ttf| ƒ}t  dddg¡}t  ||ƒdddg¡�sJt‚tdk} ttf| ƒ}t  dddg¡}t  ||ƒdddg¡�sŠt‚d S )NrB   r6   r   r]   FT)	rM   r1   r   r   r   rb   Úarray_equalr;   r   )ÚerT   rK   r>   r>   r?   Útest_relational’   s4    

rr   c                  C   sà   t stdƒ tttƒ} tttf| ƒ}t  ddddg¡}d}t  |||ƒddddg¡sXt‚t  ddddg¡}t  ddddg¡}t  |||ƒddddg¡sšt‚t  ddddg¡}t  ddddg¡}t  |||ƒddddg¡sÜt‚d S )NrB   r   r6   r]   r_   r`   é   )	rM   r1   r   r   r   r   rb   rp   r;   )rq   rT   rU   rV   r>   r>   r?   Útest_mod»   s    
rt   c                  C   s8   t stdƒ tdddd�} tg | dƒ}|ƒ dks4t‚d S )NrB   r]   rE   F)Úevaluater4   g      à?)rM   r1   r   r   r;   )ÚexprrT   r>   r>   r?   Útest_powÏ   s
    rw   c                  C   sB   t stdƒ ttfttƒdƒ} t| dƒd d ƒdt ks>t‚d S )NrB   r4   g»½×Ùß|Û=g#B’¡œ·;)rM   r1   r   r   r   ÚabsÚNUMPY_DEFAULT_EPSILONr;   ©rT   r>   r>   r?   Ú
test_expm1Ø   s    r{   c                  C   s>   t stdƒ ttfttƒdƒ} t| dƒd ƒdt ks:t‚d S )NrB   r4   g>ÃØN}a+)rM   r1   r   r   r   rx   ry   r;   rz   r>   r>   r?   Ú
test_log1pà   s    r|   c                   C   s<   t stdƒ ttttftttƒdƒddƒd ƒtks8t‚d S )NrB   r4   r_   r`   rs   )	rM   r1   rx   r   r   r   r    ry   r;   r>   r>   r>   r?   Ú
test_hypotç   s    r}   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S )NrB   r4   éd   r]   )rM   r1   rx   r   r   r!   ry   r;   r>   r>   r>   r?   Ú
test_log10ì   s    r   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S )NrB   r4   rs   é    )rM   r1   rx   r   r   r"   ry   r;   r>   r>   r>   r?   Ú	test_exp2ò   s    r�   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S )NrB   r4   é   é   )rM   r1   rx   r   r   r#   ry   r;   r>   r>   r>   r?   Ú	test_log2ø   s    r„   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S ©NrB   r4   r`   r]   )rM   r1   rx   r   r   r$   ry   r;   r>   r>   r>   r?   Ú	test_Sqrtþ   s    r†   c                   C   s6   t stdƒ tttfttƒdƒdƒd ƒtks2t‚d S r…   )rM   r1   rx   r   r   r   ry   r;   r>   r>   r>   r?   Ú	test_sqrt  s    r‡   c                  C   sÄ   t stdƒ tdddƒ} tdddƒ}| d | | }t| |ƒ| }t| |f|ƒ}t| |f|ƒ}t  dddgdddgdd	d
gg¡}t j |¡dks”t‚t  dddg¡}t  	|||ƒ|||ƒ¡sÀt‚d S )NrB   r\   r_   r   r6   rE   r]   rs   é   rk   r`   )
rM   r1   r   r   r   rb   ZlinalgZmatrix_rankr;   rO   )r\   r   rv   Zmatsolve_exprrT   Z
f_matsolveZm0Zx0r>   r>   r?   Útest_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^t‚tƒ }| |¡d	ksvt‚d S )
NrB   Úa_1rD   r_   Úa_2Úa_3Úa_4)é   rˆ   z%numpy.block([[a_1, a_2], [a_3, a_4]]))rM   r1   r   r   Úshaper;   r*   r:   )rŠ   r‹   rŒ   r�   ÚAr<   r>   r>   r?   Ú
test_16857  s    r‘   c                     s¦   t stdƒ tdddƒ} t| | tdƒ ƒ}t  ddgddgg¡}t  ddgddgg¡}||ƒ|k ¡ sjt‚dd	lm	} |d
dd�‰tdˆˆƒ‰ t
t‡ ‡fdd„ƒ d S )NrB   r\   r]   r6   r_   r`   rs   r   )r   ÚnT)Úintegerc                      s   t ˆ ˆ tˆƒ ƒS rF   )r   r   r>   ©r^   r’   r>   r?   Ú<lambda>=  ó    z"test_issue_17006.<locals>.<lambda>)rM   r1   r   r   r   rb   rd   r;   Úsympy.core.symbolr   r2   ÚNotImplementedError)r\   rT   rf   Úmrr   r>   r”   r?   Útest_issue_17006.  s    rš   c            	      C   sš   t stdƒ tdƒ\} }}t| ||ƒt| ||ƒ }t| ||f|dƒ}d\}}t j |¡t j |¡ }}t 	||Ž ||Ž ¡s~t
‚t 	||Ž ||Ž ¡s–t
‚d S )NzJax not installedzx y zr5   ))r6   r]   r_   )r`   rs   rˆ   )r5   r1   r   r   r   r   r4   ZasarrayrM   rO   r;   )	r   ÚyÚzrv   ÚfuncZinput_tuple1Zinput_tuple2Zinput_array1Zinput_array2r>   r>   r?   Útest_jax_tuple_compatibility?  s    rž   c                   C   s4   t ƒ  tdƒ¡dkst‚t ƒ  tdƒ¡dks0t‚d S )N)rl   )r_   rs   znumpy.array([[1, 2], [3, 5]])rl   znumpy.array((1, 2)))r*   r:   r%   r;   r>   r>   r>   r?   Útest_numpy_arrayK  s    rŸ   c                   C   sD   t d dkst‚t d dks t‚td dks0t‚td dks@t‚d S )	NÚNaNz	numpy.nanZ
EulerGammaznumpy.euler_gammaÚacosznumpy.arccosÚlogz	numpy.log)r,   r;   r-   r>   r>   r>   r?   Útest_numpy_known_funcs_constsO  s    r£   c                   C   sD   t d dkst‚t d dks t‚td dks0t‚td dks@t‚d S )	NZGoldenRatiozscipy.constants.golden_ratioÚPizscipy.constants.piÚerfzscipy.special.erfÚ	factorialzscipy.special.factorial)r.   r;   r/   r>   r>   r>   r?   Útest_scipy_known_funcs_constsV  s    r§   c                  C   s&   t ƒ } t| dƒst‚t| dƒs"t‚d S )NÚ_print_acosÚ
_print_log)r*   Úhasattrr;   )Úprntrr>   r>   r?   Útest_numpy_print_methods]  s    r¬   c                  C   s®   t ƒ } t| dƒst‚t| dƒs"t‚t| dƒs0t‚t| dƒs>t‚t| dƒsLt‚tdddd�}td	dd
�}|  t||ƒ¡dks~t‚|  t|ƒ¡dks”t‚|  t|ƒ¡dksªt‚d S )Nr¨   r©   Z
_print_erfZ_print_factorialZ_print_chebyshevtÚkT)r“   Znonnegativer   )Úrealzscipy.special.polygamma(k, x)zscipy.special.sici(x)[0]zscipy.special.sici(x)[1])r+   rª   r;   r   r:   r	   r
   r   )r«   r­   r   r>   r>   r?   Útest_scipy_print_methodsb  s    r¯   N)lZsympy.concrete.summationsr   Zsympy.core.modr   Zsympy.core.relationalr   r   r—   r   Z(sympy.functions.elementary.miscellaneousr   Z$sympy.functions.elementary.piecewiser   Z'sympy.functions.special.gamma_functionsr	   Z'sympy.functions.special.error_functionsr
   r   Z&sympy.matrices.expressions.blockmatrixr   Z"sympy.matrices.expressions.matexprr   Z"sympy.matrices.expressions.specialr   Zsympy.utilities.lambdifyr   Zsympyr   r   r   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,   r-   r.   r/   Z3sympy.tensor.array.expressions.from_matrix_to_arrayr0   Zsympy.testing.pytestr1   r2   Zsympy.externalr3   rM   r5   Zfinforb   ZdtypeZdeafult_float_infoÚepsry   r@   rA   rW   r[   rh   ro   rr   rt   rw   r{   r|   r}   r   r�   r„   r†   r‡   r‰   r‘   rš   rž   rŸ   r£   r§   r¬   r¯   r>   r>   r>   r?   Ú<module>   sl   $$ *)	