U
    ZÊ¹j#  ã                   @   s&  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 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 edƒ\ZZZedƒ\ZZZ edƒ\Z!Z"Z#dd„ Z$dd„ Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+d d!„ Z,G d"d#„ d#eƒZ-d$d%„ Z.d&S )'é    )ÚSum)ÚExpr)Úsymbols)Úsqrt)Ú	Piecewise)Úsin)ÚMutableDenseMatrix)ÚInterval)Úlambdify)Úraises)ÚTensorflowPrinter)Ú
lambdareprÚLambdaPrinterÚNumExprPrinterzx,y,zzi,a,bzj,c,dc                   C   s@   t tt ƒdkst‚t tt ƒdks(t‚t tt ƒdks<t‚d S )Nzx*y)zy + xzx + yzx**y)r   ÚxÚyÚAssertionError© r   r   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_lambdarepr.pyÚ
test_basic   s    r   c                  C   s6   t d } t| ƒt| ƒkst‚tt| gƒƒdks2t‚d S )Né   zImmutableDenseMatrix([[x % 2]]))r   r   Ústrr   ÚMatrix)Úer   r   r   Útest_matrix   s    r   c                  C   sR  d} t ttdk fƒ}t|ƒ}t| | ƒ |dks4t‚t dtdk fdtdk fdƒ}t|ƒ}t| | ƒ |dkspt‚t dtdk fdtdk fƒ}t|ƒ}t| | ƒ |dksªt‚t ttdk ftd td	d
ddƒ t¡fdƒ}t|ƒ}t| | ƒ |dksöt‚t td tdk fttdk fdt tdkfddd�}t|ƒ}t| | ƒ |dk�sJt‚t td tdk fttdk fdt tdkfdd�}t|ƒ}t| | ƒ |dk�sœt‚t dtdkfdtdkfd	td	kfd
td
kfdtdkfdƒ}t|ƒ}t| | ƒ |dk�søt‚t dtdkfdtdkfd	td	kfd
td
kfdtdkfdƒ}t|ƒ}t| | ƒ |dk�sTt‚t dtdkfdtdkfd	td	kfd
td
kfdtdkfdƒ}t|ƒ}t| | ƒ |dk�s°t‚t dtdk fdtdk fd	td	k fd
td
k fdtdk fdƒ}t|ƒ}t| | ƒ |dk�st‚t t dtdkfdƒtdkfdƒ}t|ƒ}t| | ƒ |dk�sNt‚d S )Nz
lambda x: r   z((x) if (x < 0) else None)é   r   )r   Tz-((1) if (x < 1) else (2) if (x < 2) else (0))z.((1) if (x < 1) else (2) if (x < 2) else None)é   é   TFzC((x) if (x < 1) else (x**2) if (((x <= 4)) and ((x > 3))) else (0))©ÚevaluatezI((x**2) if (x < 0) else (x) if (x < 1) else (2 - x) if (x >= 1) else (0))zJ((x**2) if (x < 0) else (x) if (x < 1) else (2 - x) if (x >= 1) else None)é   )é   Tzn((1) if (x >= 1) else (2) if (x >= 2) else (3) if (x >= 3) else (4) if (x >= 4) else (5) if (x >= 5) else (6))zn((1) if (x <= 1) else (2) if (x <= 2) else (3) if (x <= 3) else (4) if (x <= 4) else (5) if (x <= 5) else (6))zi((1) if (x > 1) else (2) if (x > 2) else (3) if (x > 3) else (4) if (x > 4) else (5) if (x > 5) else (6))zi((1) if (x < 1) else (2) if (x < 2) else (3) if (x < 3) else (4) if (x < 4) else (5) if (x < 5) else (6)))r   T)r   Tz1((((1) if (x > 0) else (2))) if (y > 0) else (3)))r   r   r   Úevalr   r	   Úcontainsr   )ÚhÚpÚlr   r   r   Útest_piecewise#   sÎ    

ý

þ
ý
 ü
 ý




ú




ú




ú




ú
þýûr'   c                  C   sd   t tt tttfƒ} t| ƒ}|dks(t‚tttf}t|| ƒ}d}||Ž |  t	||ƒ¡ 
¡ ks`t‚d S )Nz+(builtins.sum(x**i for i in range(a, b+1)))©r   r   é   )r   r   ÚiÚaÚbr   r   r
   ÚsubsÚzipÚdoit©Úsr&   ÚargsÚfÚvr   r   r   Útest_sum__1�   s    

r5   c                  C   sd   t tt tttfƒ} t| ƒ}|dks(t‚tttf}t|| ƒ}d}||Ž |  t	||ƒ¡ 
¡ ks`t‚d S )Nz*(builtins.sum(i*x for i in range(a, b+1)))r(   )r   r*   r   r+   r,   r   r   r
   r-   r.   r/   r0   r   r   r   Útest_sum__2©   s    

r6   c                  C   s|   t tt t tttftttfƒ} t| ƒ}|dks4t	‚tttttf}t
|| ƒ}d}|  t||ƒ¡ ¡ }||Ž }||ksxt	‚d S )NzE(builtins.sum(i*x + j for i in range(a, b+1) for j in range(c, d+1))))r   r   r   r    r!   )r   r*   r   Újr+   r,   ÚcÚdr   r   r
   r-   r.   r/   )r1   r&   r2   r3   ÚvalsZf_refZf_resr   r   r   Útest_multiple_sums´   s     
r;   c                  C   sD   t ddiƒ} | jttƒdd�dks&t‚| jttƒdd�dks@t‚d S )NÚstandardÚpython3F)Zrationalzsqrt(x)Tzx**(1/2))r   Z
_print_Powr   r   r   )Zprntrr   r   r   Ú	test_sqrtÂ   s    r>   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t ttƒdd�S )NÚgarbage)Úmethod)r   r   r   r   r   r   r   Ú<lambda>É   ó    ztest_settings.<locals>.<lambda>)r   Ú	TypeErrorr   r   r   r   Útest_settingsÈ   s    rD   c                  C   sŽ   ddl m}  | tdkdddd�}tƒ  |¡dks4t‚ddlm}m}m	}m
} |d d|tƒg|ttƒ|td	 ƒgƒ}d
}tƒ  |¡|ksŠt‚d S )Nr   )ÚITETFr   z=numexpr.evaluate('where((x > 0), True, False)', truediv=True))ÚReturnÚFunctionDefinitionÚVariableÚ
AssignmentZfoor   zidef foo(x):
    y = numexpr.evaluate('x', truediv=True)
    return numexpr.evaluate('y**2', truediv=True))Zsympy.logic.boolalgrE   r   r   Údoprintr   Zsympy.codegen.astrF   rG   rH   rI   r   )rE   ÚexprrF   rG   rH   rI   Zfunc_defÚexpectedr   r   r   Útest_numexprÌ   s    
ÿ&rM   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚCustomPrintedObjectc                 C   s   dS )NÚlambdar   ©ÚselfÚprinterr   r   r   Ú_lambdacodeÜ   s    zCustomPrintedObject._lambdacodec                 C   s   dS )NÚ
tensorflowr   rP   r   r   r   Ú_tensorflowcodeß   s    z#CustomPrintedObject._tensorflowcodec                 C   s   dS )NÚnumpyr   rP   r   r   r   Ú
_numpycodeâ   s    zCustomPrintedObject._numpycodec                 C   s   dS )NZnumexprr   rP   r   r   r   Ú_numexprcodeå   s    z CustomPrintedObject._numexprcodec                 C   s   dS )NZmpmathr   rP   r   r   r   Ú_mpmathcodeè   s    zCustomPrintedObject._mpmathcodeN)Ú__name__Ú
__module__Ú__qualname__rS   rU   rW   rX   rY   r   r   r   r   rN   Û   s
   rN   c                  C   sp   t ƒ } tƒ  | ¡dkst‚tƒ  | ¡dks.t‚tƒ  | ¡dksBt‚tƒ  tttdkft	tdk fƒ¡dkslt‚d S )NrO   rT   z)numexpr.evaluate('numexpr', truediv=True)r   z7numexpr.evaluate('where((x >= 0), y, z)', truediv=True))
rN   r   rJ   r   r   r   r   r   r   Úz)Úobjr   r   r   Útest_printmethodì   s     ÿr_   N)/Zsympy.concrete.summationsr   Zsympy.core.exprr   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Z$sympy.functions.elementary.piecewiser   Z(sympy.functions.elementary.trigonometricr   Zsympy.matrices.denser   r   Zsympy.sets.setsr	   Zsympy.utilities.lambdifyr
   Zsympy.testing.pytestr   Zsympy.printing.tensorflowr   Zsympy.printing.lambdareprr   r   r   r   r   r]   r*   r+   r,   r7   r8   r9   r   r   r'   r5   r6   r;   r>   rD   rM   rN   r_   r   r   r   r   Ú<module>   s2   z