U
    ÉZj¥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&   úa/var/www/html/TRUCKING_PROJECT/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.   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s�t‚||ƒ||   ¡ ||ƒ|| 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