U
    ƒe¥G  ã                   @   sž   d dl 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 )é    N)Ú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/assets/scripts/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st‚||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.   r/   ÚnÚmÚfnÚfmÚcÚc2r"   Ús2ÚaÚbÚtÚuÚvÚwÚeÚfr&   r&   r'   Útest_sanity2   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.   r/   r0   r1   Ú123z
[123, 456]z
(123, 456)r   r2   z2 * xéÿÿÿÿz-xéþÿÿÿz-2 * xúx + yz-x - yr3   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) ** 3rL   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.   r/   r>   r?   rE   rB   rI   r&   r&   r'   Útest_tostring_fortranƒ   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.   r/   r0   r2   ©Ú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*   ra   r-   r.   r/   r>   r&   r&   r'   Útest_tostring_c´   sr      ÿþþ ÿþþÿÿÿÿÿÿÿÿÿÿÿÿ
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.   r/   r2   )r   r4   r   rO   r3   r4   é   é   é   é   é   g       @g      à?r5   ú"123")z"ABC123"r   g      ð?g      ð¿g       Ày       @      @y      À      @)r   r   r   r<   r!   r:   r=   r8   r   r   r   rl   r   r;   ZCONCATr
   r   )r*   r-   r.   r/   r"   rG   rB   r&   r&   r'   Útest_operationsÔ   s€       $&*&    þúþ".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.   r/   r4   )r   r	   Ú
substituter!   r   r   )r*   r-   r.   r/   rE   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.   r/   rL   r5   rs   z+ xz-  xrQ   zx + 1r   rT   zx * 2r2   rc   rS   r`   zx ** 2 ** 3é   z(x + y) * zrU   zf(x,y)rV   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/)rN   r0   Z123_2Z123_myintkindZ	myintkindz123.0g     À^@r4   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**yrd   re   rf   rh   rg   ri   rW   rX   rY   r[   rZ   r\   )r   r   r	   r   r!   r   ÚPythonr   ÚFortranr   r
   r   r   r   r   r   r   r   r   r   r   )r*   r-   r.   r/   rL   r"   rG   rE   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.   r/   rL   c                    s   | ˆ kr|S d S r    r&   )r"   r#   ©r-   r&   r'   Úreplace_visit‹  s    z1TestSymbolic.test_traverse.<locals>.replace_visitr2   r   c                    sV   | j tjkr4| jd }ˆ  |¡ |ˆkrRˆ |¡ n| j tjkrR| ˆ krRˆ | ¡ d S )Nr   )r6   r   r^   ÚdataÚaddÚremover7   )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    )r6   r   r7   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    )r6   r   r^   r7   rƒ   r‰   r&   r&   r'   Úcollect_symbols3·  s    z4TestSymbolic.test_traverse.<locals>.collect_symbols3)r   Útraverser!   r   r   Úset)r*   r.   r/   rL   r   rˆ   r‹   rŒ   r&   )r†   r‡   r-   r'   Útest_traverse„  sJ    "ÿÿÿÿ
 	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.   r/   r   r   r2   r3   c                      s   ˆ ˆ    ˆ ¡S r    )Úlinear_solver&   r€   r&   r'   Ú<lambda>Ô  ó    z0TestSymbolic.test_linear_solve.<locals>.<lambda>)r   r   r   r!   ÚpytestZraisesÚRuntimeError)r*   r.   r/   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.   r0   r   r2   )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st‚||ƒ||   ¡ ||ƒ|| hks¸t‚||ƒ|  ¡ ||ƒhksÖt‚d S )Nr-   r.   r0   )r   r   Zpolynomial_atomsr!   rŽ   r–   r&   r&   r'   Útest_polynomial_atomsã  s     (z"TestSymbolic.test_polynomial_atomsN)Ú__name__Ú
__module__Ú__qualname__r,   rM   r_   rm   rt   rv   r   r   r•   r—   r˜   r&   r&   r&   r'   r   #   s   Q1 @^>r   )!r“   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