o
    ÔÁgmF  ã                   @   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 ]0}||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/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/numpy/f2py/tests/test_symbolic.pyÚworker   s   
z2TestSymbolic.test_eliminate_quotes.<locals>.worker)Ú Ú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sJ ‚||ks"J ‚||ks(J ‚t|ƒd us0J ‚tdƒ}tdƒ}|jtjks@J ‚t|ƒdksHJ ‚||ksNJ ‚||ksTJ ‚t|ƒd us\J ‚tdƒ}td	ƒ}|jtjkslJ ‚t|ƒd
kstJ ‚||kszJ ‚||ks€J ‚t|ƒd usˆJ ‚t	ddƒ}t	d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 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sJ ‚t|ƒdks J ‚||ks'J ‚||ks.J ‚t|ƒd us7J ‚t|ƒ}t|ƒ}|jtjksHJ ‚t|ƒdksQJ ‚||ksXJ ‚||ks_J ‚t|ƒd ushJ ‚t|||ƒ}t|||ƒ}|jtj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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   ÚINTEGERÚREALr   ÚCOMPLEXr	   ÚSTRINGr
   ÚARRAYr   ÚTERMSr   ÚFACTORSr   ÚTERNARYr   r   Ú
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s'J ‚t|ƒdks/J ‚t|ƒdks7J ‚t|ƒdks?J ‚tttj|d	iƒƒdksMJ ‚tttj|d
iƒƒdks[J ‚tttj|diƒƒdksiJ ‚tttj|diƒƒdkswJ ‚tttj|d	|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s§J ‚tttj|d|diƒƒdks·J ‚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sJ ‚tttj|d
|diƒƒdks!J ‚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soJ ‚tttj	d|fi fƒƒd!ks€J ‚tttj	d||fi fƒƒd"ks’J ‚tttj
d|fƒƒ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 ‚tt||ƒƒd)ksêJ ‚tt||ƒƒd*ksöJ ‚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) ** 3rR   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@   rA   ÚAPPLYÚINDEXINGr   r   r   r   r   r   r   )	r+   r.   r/   r0   rD   rE   rK   rH   rO   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s#J ‚ttj|| diƒj|ddks5J ‚ttj|d	iƒj|dd
ksEJ ‚tt	j
||ƒj|ddksTJ ‚tt	j
||| ƒj|ddkseJ ‚tt	j
|| || ƒj|ddksxJ ‚||| ||   | 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 ‚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/   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   rA   Útostringr   r   ÚDIVr   r   r   r   r   r   r   )r+   rh   r.   r/   r0   rD   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sJ ‚|| ttjdƒks&J ‚|| ttj|d|diƒks6J ‚|| ttj|d|diƒksFJ ‚|| ttj|diƒksTJ ‚|| ttj|d|diƒksdJ ‚|
 |kskJ ‚| 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sJ ‚d| d|  ttj|d|diƒks±J ‚|| 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s!J ‚|| d || d  d|d  d|d   ks<J ‚|| | || ||  ksMJ ‚|||  || ||  ks^J ‚|d tt	j
|tdƒƒksnJ ‚d| d |ksyJ ‚d| d tt	j
d| tdƒƒksJ ‚d	| 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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s!J ‚|d ttj|diƒks0J ‚tdƒ}tdƒ}|| ttjdƒksEJ ‚|| ttj||fƒksTJ ‚|| ttj||fƒkscJ ‚tddƒ}| tddƒkssJ ‚|| tdƒks~J ‚|| tdƒks‰J ‚d S )Nr.   r/   r0   r3   )r   r5   r   rU   r4   r5   é   é   é   é   é   g       @g      à?r6   ú"123")z"ABC123"r   g      ð?g      ð¿g       Ày       @      @y      À      @)r   r   r   r@   r;   rA   r9   r   r   r   rs   r	   r>   ÚCONCATr   r   )r+   r.   r/   r0   r"   rM   rH   r&   r&   r'   Útest_operations½   sj      $$($þ
ÿ".6"" (((,ÿ
ÿÿ(
zTestSymbolic.test_operationsc                 C   sR  t dƒ}t dƒ}t dƒ}t||fƒ}| ||i¡|ksJ ‚||  ||i¡|| ks,J ‚||  ||i¡|| ks;J ‚|d  ||i¡|d ksJJ ‚||  ||i¡|| ksYJ ‚| ||| i¡|| kshJ ‚| ||| i¡t|| |fƒks{J ‚t|||ƒ ||| i¡t|| ||ƒks’J ‚t||ƒ ||| i¡t|| |ƒks§J ‚d S )Nr.   r/   r0   r5   )r   r
   Ú
substituter   r   )r+   r.   r/   r0   rK   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s&J ‚tdƒ|ks.J ‚tdƒ| ks7J ‚td	ƒ|| ksAJ ‚td
ƒ|d ksKJ ‚tdƒ|| ksUJ ‚tdƒ|d ks_J ‚tdƒ|| ksiJ ‚tdtjd|d ksvJ ‚tdtjd|d ksƒJ ‚tdƒ|| | ksJ ‚tdƒ||ƒks™J ‚tdƒ|||ƒks¤J ‚tdƒ|| ks®J ‚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sJ ‚td ƒt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sGJ ‚td)ƒtd&dƒksSJ ‚td*ƒtd&d'ƒks_J ‚td+ƒtd&dƒkskJ ‚td,ƒtd&dƒkswJ ‚td-ƒtd&d'ƒksƒJ ‚td.ƒtd&dƒksJ ‚td/ƒtd&d0ƒks›J ‚td1ƒtd2d'ƒks§J ‚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sJ ‚tdCƒt|ƒksJ ‚tdDƒtt|ƒƒks(J ‚tdEƒt|ƒks3J ‚tdFƒt|ƒt|ƒ ksBJ ‚tdGƒt|ƒt|ƒ ksQJ ‚tdHƒt|ƒt|ƒ ks`J ‚tdIƒt|ƒt|ƒ ksoJ ‚tdJƒt||ƒks{J ‚tdKƒt||ƒks‡J ‚tdLƒt||ƒks“J ‚tdMƒt||ƒksŸJ ‚tdNƒt||ƒks«J ‚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/   r0   rR   r6   rz   z+ xz-  xrW   zx + 1r   rZ   zx * 2r3   rj   rY   rg   zx ** 2 ** 3é   z(x + y) * zr[   zf(x,y)r\   zf[x][y]z"ABC" // "123" zf("ABC")zMYSTRKIND_"ABC"Ú	MYSTRKINDz(/x, y/)zf((/x, y/))z(/(x+y)*z/)rT   r1   Ú123_2Ú123_myintkindÚ	myintkindz123.0g     À^@r5   z123.0_4z123.0_8z123.0e0z123.0d0Ú123d0z123e-0z123d+0z123.0_myrealkindÚ
myrealkindÚ3E4g     LÝ@z(1, 2)z	(1e2, PI)g      Y@ÚPIz[1, 2]zPOINT(x, y=1)ÚPOINT)r/   z-PERSON(name="John", age=50, shape=(/34, 23/))ÚPERSONz"John"é2   é"   é   )ÚnameÚageÚshapezx?y:zz*xz**xz&xz(*x) * (*y)z	(*x) * *yz*x * *yz*x**yrk   rl   rm   ro   rn   rp   r]   r^   r_   ra   r`   rb   )r   r	   r
   r   r   ÚPythonr   ÚFortranr   r   r   r   r   r   r   r   r   r   r   r   )r+   r.   r/   r0   rR   r"   rM   rK   r&   r&   r'   Útest_fromstring	  s²   ÿÿÿÿÿÿ ÿ"ÿý
ÿ"zTestSymbolic.test_fromstringc                    s  t dƒ‰t dƒ}t dƒ}t dƒ}|f‡fdd„	}ˆ |¡|ks!J ‚| |¡|ks*J ‚| |¡|ks3J ‚||ƒ |¡||ƒks@J ‚|ˆƒ |¡||ƒksMJ ‚||  |¡|| ksZJ ‚||  |¡|| ksgJ ‚ˆ| |  |¡d| | ksxJ ‚ˆ||ˆ| ƒ  |¡|||tdƒƒ ksJ ‚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/   r0   rR   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                    sd   | j tju r| jd }ˆ  |¡ |ˆv rˆ |¡ d S d S | j tju r.| ˆ vr0ˆ | ¡ d S d S d S )Nr   )r7   r   rd   ÚdataÚaddÚremover8   )r"   Úoper)Úfunction_symbolsÚsymbolsr&   r'   Úcollect_symbols€  s   

ÿÿz3TestSymbolic.test_traverse.<locals>.collect_symbolsc                 S   s   | j tju r| | ¡ d S 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u r| S | j tju r| | ¡ d S d S r!   )r7   r   rd   r8   r–   rœ   r&   r&   r'   Úcollect_symbols3—  s
   ÿz4TestSymbolic.test_traverse.<locals>.collect_symbols3)r   Útraverser   r   Úset)r+   r/   r0   rR   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sJ ‚ˆ d  ˆ ¡tdƒtdƒfks,J ‚dˆ   ˆ ¡tdƒtdƒfks=J ‚dˆ  d  ˆ ¡tdƒtdƒfksPJ ‚tdƒ ˆ ¡tdƒtdƒfksaJ ‚| ˆ ¡tdƒ|fksnJ ‚||  ˆ ¡tdƒ|| fksJ ‚ˆ |  ˆ ¡tdƒ|fksŽJ ‚|ˆ  |  ˆ ¡||fksJ ‚|| ˆ  |  ˆ ¡|| |fks°J ‚|| ˆ  |  ˆ ¡|| |fksÃJ ‚tt‡ fdd	„ƒ d S )
Nr.   r/   r0   r   r   r3   r4   c                      s   ˆ ˆ    ˆ ¡S r!   )Úlinear_solver&   r“   r&   r'   Ú<lambda>´  s    z0TestSymbolic.test_linear_solve.<locals>.<lambda>)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sJ ‚t|| ƒ||fks$J ‚t|| ƒ||fks0J ‚t|| ƒ||fks<J ‚t|| ƒ|| tdƒfksLJ ‚t|||  ƒ|||  |fks^J ‚t|||||    ƒ||d  || | fksxJ ‚d S )Nr.   r/   r1   r   r3   )r   r   r   ©r+   r.   r/   rD   r&   r&   r'   Útest_as_numer_denom¶  s    $8z TestSymbolic.test_as_numer_denomc                 C   sÚ   t dƒ}t dƒ}tdƒ}| ¡ |hksJ ‚| ¡ tƒ ksJ ‚||  ¡ || hks+J ‚||ƒ ¡ ||ƒhks8J ‚||ƒ|  ¡ ||ƒ|hksHJ ‚||ƒ||   ¡ ||ƒ|| hks\J ‚||ƒ|  ¡ ||ƒhkskJ ‚d S )Nr.   r/   r1   )r   r   Úpolynomial_atomsr¡   r§   r&   r&   r'   Útest_polynomial_atomsÃ  s    ("z"TestSymbolic.test_polynomial_atomsN)Ú__name__Ú
__module__Ú__qualname__r-   rS   rf   rt   r|   r~   r’   r¢   r¦   r¨   rª   r&   r&   r&   r'   r       s    Q19\=r    N)"Únumpy.testingr   Ú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   ÚF2PyTestr    r&   r&   r&   r'   Ú<module>   s    t