a
    hÝEbiF  ã                   @   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"J ‚d S ©N)r   r   )ÚsÚrÚdÚs1© r&   ú^/home/ja/django-apps/lartica_env/lib/python3.9/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(J ‚t|ƒdks8J ‚||ksDJ ‚||ksPJ ‚t|ƒd us`J ‚tdƒ}tdƒ}|jtjks€J ‚t|ƒdks�J ‚||ksœJ ‚||ks¨J ‚t|ƒd us¸J ‚tdƒ}td	ƒ}|jtjksØJ ‚t|ƒd
ksèJ ‚||ksôJ ‚||k�sJ ‚t|ƒd u�sJ ‚t	ddƒ}t	ddƒ}	|jtj
k�s:J ‚t|ƒdk�sLJ ‚||k�sZJ ‚||	k�shJ ‚t|ƒd u�szJ ‚tdƒ}
tdƒ}|
jtjk�sœJ ‚t|
ƒdk�s¶J t|
ƒƒ‚|
|
k�sÄJ ‚|
|k�sÒJ ‚t||fƒ}t|fƒ}|jtjk�súJ ‚t|ƒdk�sJ ‚||k�sJ ‚||k�s(J ‚t|ƒ}t|ƒ}|jtjk�sJJ ‚t|ƒdk�s\J ‚||k�sjJ ‚||k�sxJ ‚t|ƒd u�sŠJ ‚t|ƒ}t|ƒ}|jtjk�s¬J ‚t|ƒdk�s¾J ‚||k�sÌJ ‚||k�sÚJ ‚t|ƒd u�sìJ ‚t|||ƒ}t|||ƒ}|jtjk�sJ ‚||k�s$J ‚||k�s2J ‚t|ƒd u�sDJ ‚t||ƒ}t||ƒ}|jtjk�sjJ ‚||k�sxJ ‚||k�s†J ‚t|ƒd u�s˜J ‚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   ÚSYMBOLÚreprÚhashr   ÚINTEGERZREALr   ZCOMPLEXr	   ÚSTRINGr
   Ú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_sanity   s†    




zTestSymbolic.test_sanityc           	   
   C   s  t dƒ}t dƒ}t dƒ}tdƒ}tdƒ}t||fƒ}t||ƒ}t|ƒdksNJ ‚t|ƒdks^J ‚t|ƒdksnJ ‚t|ƒdks~J ‚tttj|d	iƒƒdksšJ ‚tttj|d
iƒƒdks¶J ‚tttj|diƒƒdksÒJ ‚tttj|diƒƒdksîJ ‚tttj|d	|d	iƒƒdk�sJ ‚tttj|d|diƒƒdk�s2J ‚tttj|d
|diƒƒdk�sTJ ‚tttj|d|diƒƒdk�svJ ‚tttj|d
|diƒƒdk�s˜J ‚tttj|d	iƒƒdk�s¶J ‚tttj|d
iƒƒdk�sÔJ ‚tttj|diƒƒdk�sòJ ‚tttj|diƒƒdk�sJ ‚tttj|d	|d	iƒƒdk�s2J ‚tttj|d
|diƒƒdk�sTJ ‚ttj|d
ttj|d	|d	iƒdiƒ}t|ƒdk�s’J t|ƒƒ‚ttj|d
ttj|d	|d	iƒdiƒ}t|ƒdk�sÐJ t|ƒƒ‚tttj	ddi fƒƒd k�sðJ ‚tttj	d|fi fƒƒd!k�sJ ‚tttj	d||fi fƒƒd"k�s6J ‚tttj
d|fƒƒd#k�sTJ ‚tt|||ƒƒd$k�snJ ‚tt||ƒƒd%k�s†J ‚tt||ƒƒd&k�sžJ ‚tt||ƒƒd'k�s¶J ‚tt||ƒƒd(k�sÎJ ‚tt||ƒƒd)k�sæJ ‚tt||ƒƒd*k�sþJ ‚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) ** 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>   ÚAPPLYZINDEXINGr   r   r   r   r   r   r   )	r*   r-   r.   r/   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sFJ ‚ttj|| diƒj|d�dksjJ ‚ttj|d	iƒj|d�d
ksŠJ ‚tt	j
||ƒj|d�dks¨J ‚tt	j
||| ƒj|d�dksÊJ ‚tt	j
|| || ƒj|d�dksðJ ‚||| ||   | j|d�dk�sJ ‚t|||ƒj|d�dk�s8J ‚t||ƒj|d�dk�sTJ ‚t||ƒj|d�dk�spJ ‚t||ƒj|d�dk�sŒJ ‚t||ƒj|d�dk�s¨J ‚t||ƒj|d�dk�sÄJ ‚t||ƒj|d�dk�sàJ ‚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   ÚDIVr   r   r   r   r   r   r   )r*   rb   r-   r.   r/   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s4J ‚|| ttjdƒksLJ ‚|| ttj|d|diƒkslJ ‚|| ttj|d|diƒksŒJ ‚|| ttj|diƒks¨J ‚|| ttj|d|diƒksÈJ ‚|
 |ksÖJ ‚| ttj|diƒksúJ t| ƒƒ‚d| ttj|diƒk�sJ ‚d| ttj|dtdƒdiƒk�s>J ‚d| d|  ttj|d|diƒk�shJ ‚|| d ttj|d|diƒk�sŽJ ‚|d ttj|diƒk�s¬J ‚|| 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þJ ‚|| | |d ||  k�s J ‚|| d |d d| |  |d  k�sNJ ‚|| d || d  d|d  d|d   k�s„J ‚|| | || ||  k�s¦J ‚|||  || ||  k�sÈJ ‚|d tt	j
|tdƒƒk�sèJ ‚d| d |k�sþJ ‚d| d tt	j
d| tdƒƒk�s&J ‚d	| d d| k�s@J ‚d
| d tt	j
d
| tdƒƒk�shJ ‚d| d d| k�s‚J ‚d| d tt	j
d
| tdƒƒk�sªJ ‚d|d  |d	  d|d  |d   tt	j
d
| d	| ƒk�sîJ ‚d| d d
 tt	j
|tdƒƒk�s&J d| d d
 ƒ‚|d
|  tt	j
|d td
ƒƒk�sNJ ‚|d ttj|diƒk�slJ ‚tdƒ}tdƒ}|| ttjdƒk�s–J ‚|| ttj||fƒk�s´J ‚|| ttj||fƒk�sÒJ ‚tddƒ}| tddƒk�sòJ ‚|| tdƒk�sJ ‚|| tdƒk�sJ ‚d S )Nr-   r.   r/   r2   )r   r4   r   rP   r3   r4   é   é   é   é   é   g       @g      à?r5   ú"123")z"ABC123"r   g      ð?g      ð¿g       Ày       @      @y      À      @)r   r   r   r=   r:   r>   r8   r   r   r   rm   r	   r;   ZCONCATr   r   )r*   r-   r.   r/   r"   rH   rC   r&   r&   r'   Útest_operations½   sj       $&*&þÿ".6"" (((,ÿÿ
ÿ(
zTestSymbolic.test_operationsc                 C   sV  t dƒ}t dƒ}t dƒ}t||fƒ}| ||i¡|ks:J ‚||  ||i¡|| ksXJ ‚||  ||i¡|| ksvJ ‚|d  ||i¡|d ks”J ‚||  ||i¡|| ks²J ‚| ||| i¡|| ksÐJ ‚| ||| i¡t|| |fƒksöJ ‚t|||ƒ ||| i¡t|| ||ƒk�s&J ‚t||ƒ ||| i¡t|| |ƒk�sRJ ‚d S )Nr-   r.   r/   r4   )r   r
   Ú
substituter   r   )r*   r-   r.   r/   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sLJ ‚tdƒ|ks\J ‚tdƒ| ksnJ ‚td	ƒ|| ks‚J ‚td
ƒ|d ks–J ‚tdƒ|| ksªJ ‚tdƒ|d ks¾J ‚tdƒ|| ksÒJ ‚tdtjd�|d ksìJ ‚tdtjd�|d k�sJ ‚tdƒ|| | k�s"J ‚tdƒ||ƒk�s8J ‚tdƒ|||ƒk�sPJ ‚tdƒ|| k�sfJ ‚tdƒ|| | k�s€J ‚tdƒ|k�s’J ‚ttdtjd�ƒ|| k�s²J ‚tdƒ||ƒk�sÈJ ‚tdƒtddƒk�sàJ ‚tdƒ|k�súJ tdƒƒ‚tdƒ||ƒk�sJ ‚tdƒt|| | fƒk�s0J ‚td ƒtd!ƒk�sFJ ‚td"ƒtd!dƒk�s^J ‚td#ƒtd!d$ƒk�svJ ‚td%ƒtd&d'ƒk�sŽJ ‚td(ƒtd&d'ƒk�s¦J ‚td)ƒtd&dƒk�s¾J ‚td*ƒtd&d'ƒk�sÖJ ‚td+ƒtd&dƒk�sîJ ‚td,ƒtd&dƒk�sJ ‚td-ƒtd&d'ƒk�sJ ‚td.ƒtd&dƒk�s6J ‚td/ƒtd&d0ƒk�sNJ ‚td1ƒtd2d'ƒk�sfJ ‚td3ƒt	ddƒk�s~J ‚td4ƒt	td5ƒt d6ƒƒk�sžJ ‚td7ƒttdƒtdƒfƒk�sÀJ ‚td8ƒt
t d9ƒ|tdƒd:�k�säJ ‚td;ƒt
t d<ƒtd=ƒtd>ƒttd?ƒtd@ƒfƒdA�k�sJ ‚tdBƒt|||ƒk�s8J ‚tdCƒt|ƒk�sNJ ‚tdDƒtt|ƒƒk�shJ ‚tdEƒt|ƒk�s~J ‚tdFƒt|ƒt|ƒ k�sœJ ‚tdGƒt|ƒt|ƒ k�sºJ ‚tdHƒt|ƒt|ƒ k�sØJ ‚tdIƒt|ƒt|ƒ k�söJ ‚tdJƒt||ƒk�sJ ‚tdKƒt||ƒk�s&J ‚tdLƒt||ƒk�s>J ‚tdMƒt||ƒk�sVJ ‚tdNƒt||ƒk�snJ ‚tdOƒt||ƒk�s†J ‚tdPtjd�t||ƒk�s¤J ‚tdQtjd�t||ƒk�sÂJ ‚tdRtjd�t||ƒk�sàJ ‚tdStjd�t||ƒk�sþJ ‚tdTtjd�t||ƒk�sJ ‚tdUtjd�t||ƒk�s:J ‚d S )VNr-   r.   r/   rM   r5   rt   z+ xz-  xrR   zx + 1r   rU   zx * 2r2   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   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@Ú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   ÚPythonr   ÚFortranr   r   r   r   r   r   r   r   r   r   r   r   )r*   r-   r.   r/   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sBJ ‚| |¡|ksTJ ‚| |¡|ksfJ ‚||ƒ |¡||ƒks€J ‚|ˆƒ |¡||ƒksšJ ‚||  |¡|| ks´J ‚||  |¡|| ksÎJ ‚ˆ| |  |¡d| | ksðJ ‚ˆ||ˆ| ƒ  |¡|||tdƒƒ k�s J ‚tˆ|ƒ |¡t||ƒk�s@J ‚tƒ ‰ tƒ ‰‡ ‡fd	d
„}ˆ||ˆ| ƒ  |¡ ˆ |hk�s‚J ‚ˆˆ||hk�s–J ‚dd„ }tƒ ‰ˆ||ˆ| ƒ  |ˆ¡ ˆˆ|||hk�sÔJ ‚dd„ }tƒ ‰ˆ||ˆ| ƒ  |ˆ¡ ˆˆhk�sJ ‚d S )Nr-   r.   r/   rM   c                    s   | ˆ kr|S d S r!   r&   )r"   r#   ©r-   r&   r'   Úreplace_visitl  s    z1TestSymbolic.test_traverse.<locals>.replace_visitr2   r   c                    sV   | j tju r4| jd }ˆ  |¡ |ˆv rRˆ |¡ n| j tju rR| ˆ v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u 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u r| S | j tju 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   Úset)r*   r.   r/   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s6J ‚ˆ d  ˆ ¡tdƒtdƒfksXJ ‚dˆ   ˆ ¡tdƒtdƒfkszJ ‚dˆ  d  ˆ ¡tdƒtdƒfks J ‚tdƒ ˆ ¡tdƒtdƒfksÂJ ‚| ˆ ¡tdƒ|fksÜJ ‚||  ˆ ¡tdƒ|| fksþJ ‚ˆ |  ˆ ¡tdƒ|fk�sJ ‚|ˆ  |  ˆ ¡||fk�s>J ‚|| ˆ  |  ˆ ¡|| |fk�sfJ ‚|| ˆ  |  ˆ ¡|| |fk�sŽJ ‚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   Ú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s0J ‚t|| ƒ||fksHJ ‚t|| ƒ||fks`J ‚t|| ƒ||fksxJ ‚t|| ƒ|| tdƒfks˜J ‚t|||  ƒ|||  |fks¼J ‚t|||||    ƒ||d  || | fksðJ ‚d S )Nr-   r.   r0   r   r2   )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*J ‚| ¡ tƒ ks<J ‚||  ¡ || hksVJ ‚||ƒ ¡ ||ƒhkspJ ‚||ƒ|  ¡ ||ƒ|hks�J ‚||ƒ||   ¡ ||ƒ|| hks¸J ‚||ƒ|  ¡ ||ƒhksÖJ ‚d S )Nr-   r.   r0   )r   r   Zpolynomial_atomsr�   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