U
    M»{jiF  ã                   @   s¢   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mZmZmZ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 G dd„ dej ƒZ!dS )é    )Úassert_raises)ÚExprÚOpÚArithOpÚLanguageÚ	as_symbolÚ	as_numberÚ	as_stringÚas_arrayÚ
as_complexÚas_termsÚ
as_factorsÚeliminate_quotesÚinsert_quotesÚ
fromstringÚas_exprÚas_applyÚas_numer_denomÚ
as_ternaryÚas_refÚas_derefÚ	normalizeÚas_eqÚas_neÚas_ltÚas_gtÚas_leÚas_geé   )Úutilc                   @   sd   e Z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
dd„ Zdd„ Zdd„ ZdS )ÚTestSymbolicc                 C   sr   dd„ }dD ]`}||d ƒ ||d | d ƒ ||d ƒ ||d | d ƒ ||d	 ƒ |d
| d ƒ qd S )Nc                 S   s&   t | ƒ\}}t||ƒ}|| ks"t‚d S ©N)r   r   ÚAssertionError)ÚsÚrÚdÚs1© r'   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/numpy/f2py/tests/test_symbolic.pyÚworker   s    
z2TestSymbolic.test_eliminate_quotes.<locals>.worker)Ú Zmykind_z"1234" // "ABCD"z
"1234" // z"ABCD"z"1234" // 'ABCD'z'ABCD'z"1\"2'AB'34"za = z'1\'2"AB"34'r'   )Úselfr)   Úkindr'   r'   r(   Útest_eliminate_quotes   s    z"TestSymbolic.test_eliminate_quotesc                 C   sœ  t dƒ}t dƒ}t dƒ}|jtjks(t‚t|ƒdks8t‚||ksDt‚||ksPt‚t|ƒd k	s`t‚tdƒ}tdƒ}|jtjks€t‚t|ƒdks�t‚||ksœt‚||ks¨t‚t|ƒd k	s¸t‚tdƒ}td	ƒ}|jtj	ksØt‚t|ƒd
ksèt‚||ksôt‚||k�st‚t|ƒd k	�st‚t
ddƒ}t
ddƒ}	|jtjk�s:t‚t|ƒdk�sLt‚||k�sZt‚||	k�sht‚t|ƒd k	�szt‚tdƒ}
tdƒ}|
jtjk�sœt‚t|
ƒdk�s¶tt|
ƒƒ‚|
|
k�sÄt‚|
|k�sÒt‚t||fƒ}t|fƒ}|jtjk�sút‚t|ƒdk�st‚||k�st‚||k�s(t‚t|ƒ}t|ƒ}|jtjk�sJt‚t|ƒdk�s\t‚||k�sjt‚||k�sxt‚t|ƒd k	�sŠt‚t|ƒ}t|ƒ}|jtjk�s¬t‚t|ƒdk�s¾t‚||k�sÌt‚||k�sÚt‚t|ƒd k	�sìt‚t|||ƒ}t|||ƒ}|jtjk�st‚||k�s$t‚||k�s2t‚t|ƒd k	�sDt‚t||ƒ}t||ƒ}|jtjk�sjt‚||k�sxt‚||k�s†t‚t|ƒd k	�s˜t‚d S )NÚxÚyÚzzExpr(Op.SYMBOL, 'x')é{   éÈ  zExpr(Op.INTEGER, (123, 4))gš™™™™™(@gÍÌÌÌÌÌF@zExpr(Op.REAL, (12.3, 4))r   é   é   é   zFExpr(Op.COMPLEX, (Expr(Op.INTEGER, (1, 4)), Expr(Op.INTEGER, (2, 4))))z'123'ú"ABC"zExpr(Op.STRING, ("'123'", 1))zHExpr(Op.ARRAY, (Expr(Op.INTEGER, (123, 4)), Expr(Op.INTEGER, (456, 4))))z)Expr(Op.TERMS, {Expr(Op.SYMBOL, 'x'): 1})z+Expr(Op.FACTORS, {Expr(Op.SYMBOL, 'x'): 1}))r   Úopr   ÚSYMBOLr"   ÚreprÚhashr   ÚINTEGERZREALr   ZCOMPLEXr	   ÚSTRINGr
   ZARRAYr   ÚTERMSr   ÚFACTORSr   ZTERNARYr   r   Z
RELATIONAL)r+   r.   r/   r0   ÚnÚmÚfnÚfmÚcÚc2r#   Ús2ÚaÚbÚtÚuÚvÚwÚeÚfr'   r'   r(   Útest_sanity   s†    




zTestSymbolic.test_sanityc           	   
   C   s  t dƒ}t dƒ}t dƒ}tdƒ}tdƒ}t||fƒ}t||ƒ}t|ƒdksNt‚t|ƒdks^t‚t|ƒdksnt‚t|ƒdks~t‚tttj|d	iƒƒdksšt‚tttj|d
iƒƒdks¶t‚tttj|diƒƒdksÒt‚tttj|diƒƒdksît‚tttj|d	|d	iƒƒdk�st‚tttj|d|diƒƒdk�s2t‚tttj|d
|diƒƒdk�sTt‚tttj|d|diƒƒdk�svt‚tttj|d
|diƒƒdk�s˜t‚tttj	|d	iƒƒdk�s¶t‚tttj	|d
iƒƒdk�sÔt‚tttj	|diƒƒdk�sòt‚tttj	|diƒƒdk�st‚tttj	|d	|d	iƒƒdk�s2t‚tttj	|d
|diƒƒdk�sTt‚ttj	|d
ttj|d	|d	iƒdiƒ}t|ƒdk�s’tt|ƒƒ‚ttj	|d
ttj	|d	|d	iƒdiƒ}t|ƒdk�sÐtt|ƒƒ‚tttj
ddi fƒƒd k�sðt‚tttj
d|fi fƒƒd!k�st‚tttj
d||fi fƒƒd"k�s6t‚tttjd|fƒƒd#k�sTt‚tt|||ƒƒd$k�snt‚tt||ƒƒd%k�s†t‚tt||ƒƒd&k�sžt‚tt||ƒƒd'k�s¶t‚tt||ƒƒd(k�sÎt‚tt||ƒƒd)k�sæt‚tt||ƒƒd*k�sþt‚d S )+Nr.   r/   r0   r1   r2   Ú123z
[123, 456]z
(123, 456)r   r3   z2 * xéÿÿÿÿz-xéþÿÿÿz-2 * xúx + yz-x - yr4   z2 * x + 3 * yz-2 * x + 3 * yéýÿÿÿz2 * x - 3 * yúx ** 2zx ** -1zx ** -2úx * yzx ** 2 * y ** 3zx ** 2 * (x + y) ** 3zx ** 2 * (x * y) ** 3rM   r'   zf()úf(x)zf(x, y)úf[x]zmerge(y, z, x)úx .eq. yúx .ne. yúx .lt. yúx .le. yúx .gt. yúx .ge. y)r   r   r
   r   Ústrr"   r   r   r=   r>   ÚAPPLYZINDEXINGr   r   r   r   r   r   r   )	r+   r.   r/   r0   r?   r@   rF   rC   rJ   r'   r'   r(   Útest_tostring_fortrann   sR    
"""""""$$ "$z"TestSymbolic.test_tostring_fortranc                 C   sä  t j}tdƒ}tdƒ}tdƒ}tdƒ}ttj|diƒj|d�dksFt‚ttj|| diƒj|d�dksjt‚ttj|d	iƒj|d�d
ksŠt‚t	t
j||ƒj|d�dks¨t‚t	t
j||| ƒj|d�dksÊt‚t	t
j|| || ƒj|d�dksðt‚||| ||   | j|d�dk�st‚t|||ƒj|d�dk�s8t‚t||ƒj|d�dk�sTt‚t||ƒj|d�dk�spt‚t||ƒj|d�dk�sŒt‚t||ƒj|d�dk�s¨t‚t||ƒj|d�dk�sÄt‚t||ƒj|d�dk�sàt‚d S )Nr.   r/   r0   r1   r3   ©Úlanguagezx * xz(x + y) * (x + y)é   z
pow(x, 12)úx / yzx / (x + y)z(x - y) / (x + y)z123 + x + (x - y) / (x + y)z(x?y:z)úx == yúx != yúx < yúx <= yúx > yúx >= y)r   ÚCr   r   r   r   r>   Útostringr"   r   r   ÚDIVr   r   r   r   r   r   r   )r+   rb   r.   r/   r0   r?   r'   r'   r(   Útest_tostring_cŸ   sV     ÿÿÿÿÿÿÿÿÿÿÿÿ
zTestSymbolic.test_tostring_cc                 C   s"  t dƒ}t dƒ}t dƒ}|| ttj|diƒks4t‚|| ttjdƒksLt‚|| ttj|d|diƒkslt‚|| ttj|d|diƒksŒt‚|| ttj|diƒks¨t‚|| ttj|d|diƒksÈt‚|
 |ksÖt‚| ttj|diƒksútt| ƒƒ‚d| ttj|diƒk�st‚d| ttj|dtdƒdiƒk�s>t‚d| d|  ttj|d|diƒk�sht‚|| d ttj|d|diƒk�sŽt‚|d ttj|diƒk�s¬t‚|| d ttjttj|diƒdttj|diƒdttj|d|diƒdiƒk�sþt‚|| | |d ||  k�s t‚|| d |d d| |  |d  k�sNt‚|| d || d  d|d  d|d   k�s„t‚|| | || ||  k�s¦t‚|||  || ||  k�sÈt‚|d t	t
j|tdƒƒk�sèt‚d| d |k�sþt‚d| d t	t
jd| tdƒƒk�s&t‚d	| d d| k�s@t‚d
| d t	t
jd
| tdƒƒk�sht‚d| d d| k�s‚t‚d| d t	t
jd
| tdƒƒk�sªt‚d|d  |d	  d|d  |d   t	t
jd
| d	| ƒk�sît‚d| d d
 t	t
j|tdƒƒk�s&td| d d
 ƒ‚|d
|  t	t
j|d td
ƒƒk�sNt‚|d ttj|diƒk�slt‚tdƒ}tdƒ}|| ttjdƒk�s–t‚|| ttj||fƒk�s´t‚|| ttj||fƒk�sÒt‚tddƒ}| tddƒk�sòt‚|| tdƒk�st‚|| tdƒk�st‚d S )Nr.   r/   r0   r3   )r   r5   r   rP   r4   r5   é   é   é   é   é   g       @g      à?r6   ú"123")z"ABC123"r   g      ð?g      ð¿g       Ày       @      @y      À      @)r   r   r   r=   r"   r;   r>   r9   r   r   r   rm   r	   r<   ZCONCATr   r   )r+   r.   r/   r0   r#   rH   rC   r'   r'   r(   Útest_operations½   st       $&*&  þÿ".6"" (((, ÿ  ÿ
ÿ(
zTestSymbolic.test_operationsc                 C   sV  t dƒ}t dƒ}t dƒ}t||fƒ}| ||i¡|ks:t‚||  ||i¡|| ksXt‚||  ||i¡|| ksvt‚|d  ||i¡|d ks”t‚||  ||i¡|| ks²t‚| ||| i¡|| ksÐt‚| ||| i¡t|| |fƒksöt‚t|||ƒ ||| i¡t|| ||ƒk�s&t‚t||ƒ ||| i¡t|| |ƒk�sRt‚d S )Nr.   r/   r0   r5   )r   r
   Ú
substituter"   r   r   )r+   r.   r/   r0   rF   r'   r'   r(   Útest_substituteö   s*    &
ÿÿ


ÿÿzTestSymbolic.test_substitutec              	   C   s>  t dƒ}t dƒ}t dƒ}t dƒ}tdƒ}tdƒ}t||fƒ}tdƒ|ksLt‚tdƒ|ks\t‚tdƒ| ksnt‚td	ƒ|| ks‚t‚td
ƒ|d ks–t‚tdƒ|| ksªt‚tdƒ|d ks¾t‚tdƒ|| ksÒt‚tdtjd�|d ksìt‚tdtjd�|d k�st‚tdƒ|| | k�s"t‚tdƒ||ƒk�s8t‚tdƒ|||ƒk�sPt‚tdƒ|| k�sft‚tdƒ|| | k�s€t‚tdƒ|k�s’t‚ttdtjd�ƒ|| k�s²t‚tdƒ||ƒk�sÈt‚tdƒtddƒk�sàt‚tdƒ|k�súttdƒƒ‚tdƒ||ƒk�st‚tdƒt|| | fƒk�s0t‚td ƒt	d!ƒk�sFt‚td"ƒt	d!dƒk�s^t‚td#ƒt	d!d$ƒk�svt‚td%ƒt	d&d'ƒk�sŽt‚td(ƒt	d&d'ƒk�s¦t‚td)ƒt	d&dƒk�s¾t‚td*ƒt	d&d'ƒk�sÖt‚td+ƒt	d&dƒk�sît‚td,ƒt	d&dƒk�st‚td-ƒt	d&d'ƒk�st‚td.ƒt	d&dƒk�s6t‚td/ƒt	d&d0ƒk�sNt‚td1ƒt	d2d'ƒk�sft‚td3ƒt
ddƒk�s~t‚td4ƒt
t	d5ƒt d6ƒƒk�sžt‚td7ƒtt	dƒt	dƒfƒk�sÀt‚td8ƒtt d9ƒ|t	dƒd:�k�sät‚td;ƒtt d<ƒtd=ƒt	d>ƒtt	d?ƒt	d@ƒfƒdA�k�st‚tdBƒt|||ƒk�s8t‚tdCƒt|ƒk�sNt‚tdDƒtt|ƒƒk�sht‚tdEƒt|ƒk�s~t‚tdFƒt|ƒt|ƒ k�sœt‚tdGƒt|ƒt|ƒ k�sºt‚tdHƒt|ƒt|ƒ k�sØt‚tdIƒt|ƒt|ƒ k�söt‚tdJƒt||ƒk�st‚tdKƒt||ƒk�s&t‚tdLƒt||ƒk�s>t‚tdMƒt||ƒk�sVt‚tdNƒt||ƒk�snt‚tdOƒt||ƒk�s†t‚tdPtjd�t||ƒk�s¤t‚tdQtjd�t||ƒk�sÂt‚tdRtjd�t||ƒk�sàt‚tdStjd�t||ƒk�sþt‚tdTtjd�t||ƒk�st‚tdUtjd�t||ƒk�s:t‚d S )VNr.   r/   r0   rM   r6   rt   z+ xz-  xrR   zx + 1r   rU   zx * 2r3   rd   rT   ra   zx ** 2 ** 3é   z(x + y) * zrV   zf(x,y)rW   zf[x][y]z"ABC" // "123" zf("ABC")zMYSTRKIND_"ABC"Z	MYSTRKINDz(/x, y/)zf((/x, y/))z(/(x+y)*z/)rO   r1   Z123_2Z123_myintkindZ	myintkindz123.0g     À^@r5   z123.0_4z123.0_8z123.0e0z123.0d0Z123d0z123e-0z123d+0z123.0_myrealkindZ
myrealkindZ3E4g     LÝ@z(1, 2)z	(1e2, PI)g      Y@ZPIz[1, 2]zPOINT(x, y=1)ZPOINT)r/   z-PERSON(name="John", age=50, shape=(/34, 23/))ZPERSONz"John"é2   é"   é   )ÚnameZageÚshapezx?y:zz*xz**xz&xz(*x) * (*y)z	(*x) * *yz*x * *yz*x**yre   rf   rg   ri   rh   rj   rX   rY   rZ   r\   r[   r]   )r   r	   r
   r   r"   r   ÚPythonr   ÚFortranr   r   r   r   r   r   r   r   r   r   r   r   )r+   r.   r/   r0   rM   r#   rH   rF   r'   r'   r(   Útest_fromstring	  s¸    ÿÿÿÿ
ÿÿ
  ÿ"  ÿýÿ
zTestSymbolic.test_fromstringc                    s  t dƒ‰t dƒ}t dƒ}t dƒ}|f‡fdd„	}ˆ |¡|ksBt‚| |¡|ksTt‚| |¡|ksft‚||ƒ |¡||ƒks€t‚|ˆƒ |¡||ƒksšt‚||  |¡|| ks´t‚||  |¡|| ksÎt‚ˆ| |  |¡d| | ksðt‚ˆ||ˆ| ƒ  |¡|||tdƒƒ k�s t‚tˆ|ƒ |¡t||ƒk�s@t‚tƒ ‰ tƒ ‰‡ ‡fd	d
„}ˆ||ˆ| ƒ  |¡ ˆ |hk�s‚t‚ˆˆ||hk�s–t‚dd„ }tƒ ‰ˆ||ˆ| ƒ  |ˆ¡ ˆˆ|||hk�sÔt‚dd„ }tƒ ‰ˆ||ˆ| ƒ  |ˆ¡ ˆˆhk�st‚d S )Nr.   r/   r0   rM   c                    s   | ˆ kr|S d S r!   r'   )r#   r$   ©r.   r'   r(   Úreplace_visitl  s    z1TestSymbolic.test_traverse.<locals>.replace_visitr3   r   c                    sV   | j tjkr4| jd }ˆ  |¡ |ˆkrRˆ |¡ n| j tjkrR| ˆ krRˆ | ¡ d S )Nr   )r7   r   r_   ÚdataÚaddÚremover8   )r#   Úoper)Úfunction_symbolsÚsymbolsr'   r(   Úcollect_symbols€  s    

z3TestSymbolic.test_traverse.<locals>.collect_symbolsc                 S   s   | j tjkr| | ¡ d S r!   )r7   r   r8   r„   ©Úexprrˆ   r'   r'   r(   Úcollect_symbols2Ž  s    z4TestSymbolic.test_traverse.<locals>.collect_symbols2c                 S   s*   | j tjkr| S | j tjkr&| | ¡ d S r!   )r7   r   r_   r8   r„   rŠ   r'   r'   r(   Úcollect_symbols3—  s    z4TestSymbolic.test_traverse.<locals>.collect_symbols3)r   Útraverser"   r   r   Úset)r+   r/   r0   rM   r‚   r‰   rŒ   r�   r'   )r‡   rˆ   r.   r(   Útest_traversee  sB    "ÿÿ
 	zTestSymbolic.test_traversec                    s¤  t dƒ‰ t dƒ}t dƒ}ˆ  ˆ ¡tdƒtdƒfks6t‚ˆ d  ˆ ¡tdƒtdƒfksXt‚dˆ   ˆ ¡tdƒtdƒfkszt‚dˆ  d  ˆ ¡tdƒtdƒfks t‚tdƒ ˆ ¡tdƒtdƒfksÂt‚| ˆ ¡tdƒ|fksÜt‚||  ˆ ¡tdƒ|| fksþt‚ˆ |  ˆ ¡tdƒ|fk�st‚|ˆ  |  ˆ ¡||fk�s>t‚|| ˆ  |  ˆ ¡|| |fk�sft‚|| ˆ  |  ˆ ¡|| |fk�sŽt‚tt‡ fdd	„ƒ d S )
Nr.   r/   r0   r   r   r3   r4   c                      s   ˆ ˆ    ˆ ¡S r!   )Úlinear_solver'   r�   r'   r(   Ú<lambda>´  ó    z0TestSymbolic.test_linear_solve.<locals>.<lambda>)r   r‘   r   r"   r   ÚRuntimeError)r+   r/   r0   r'   r�   r(   Útest_linear_solve¢  s    ""&""  ((zTestSymbolic.test_linear_solvec                 C   sô   t dƒ}t dƒ}tdƒ}t|ƒ|tdƒfks0t‚t|| ƒ||fksHt‚t|| ƒ||fks`t‚t|| ƒ||fksxt‚t|| ƒ|| tdƒfks˜t‚t|||  ƒ|||  |fks¼t‚t|||||    ƒ||d  || | fksðt‚d S )Nr.   r/   r1   r   r3   )r   r   r   r"   ©r+   r.   r/   r?   r'   r'   r(   Útest_as_numer_denom¶  s     $z TestSymbolic.test_as_numer_denomc                 C   sÚ   t dƒ}t dƒ}tdƒ}| ¡ |hks*t‚| ¡ tƒ ks<t‚||  ¡ || hksVt‚||ƒ ¡ ||ƒhkspt‚||ƒ|  ¡ ||ƒ|hks�t‚||ƒ||   ¡ ||ƒ|| hks¸t‚||ƒ|  ¡ ||ƒhksÖt‚d S )Nr.   r/   r1   )r   r   Zpolynomial_atomsr"   r�   r–   r'   r'   r(   Útest_polynomial_atomsÃ  s     (z"TestSymbolic.test_polynomial_atomsN)Ú__name__Ú
__module__Ú__qualname__r-   rN   r`   rn   ru   rw   r€   r�   r•   r—   r˜   r'   r'   r'   r(   r       s   Q19\=r    N)"Znumpy.testingr   Znumpy.f2py.symbolicr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r   ZF2PyTestr    r'   r'   r'   r(   Ú<module>   s   t