o
    >~#g„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 ]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%   ś/var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/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.   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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.   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) ** 3rQ   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@   ŚAPPLYŚINDEXINGr   r   r   r   r   r   r   )	r*   r-   r.   r/   rC   rD   rJ   rG   rN   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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.   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*   rg   r-   r.   r/   rC   r%   r%   r&   Śtest_tostring_c“   sn    ’žž’žž’’’’’’’’’’’’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sJ 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sJ 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.   r/   r2   )r   r4   r   rT   r3   r4   é   é   é   é   é   g       @g      ą?r5   ś"123")z"ABC123"r   g      š?g      šæg       Ąy       @      @y      Ą      @)r   r   r   r?   r:   r@   r8   r   r   r   rr   r   r=   ŚCONCATr
   r   )r*   r-   r.   r/   r!   rL   rG   r%   r%   r&   Śtest_operationsŌ   st      $$($žś
ž".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.   r/   r4   )r   r	   Ś
substituter   r   )r*   r-   r.   r/   rJ   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sJ 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sJ 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.   r/   rQ   r5   ry   z+ xz-  xrV   zx + 1r   rY   zx * 2r2   ri   rX   rf   zx ** 2 ** 3é   z(x + y) * zrZ   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/)rS   r0   Ś123_2Ś123_myintkindŚ	myintkindz123.0g     Ą^@r4   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**yrj   rk   rl   rn   rm   ro   r\   r]   r^   r`   r_   ra   )r   r   r	   r   r   ŚPythonr   ŚFortranr   r
   r   r   r   r   r   r   r   r   r   r   )r*   r-   r.   r/   rQ   r!   rL   rJ   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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/   rQ   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                    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   )r6   r   rc   Ś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 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 d S r    )r6   r   rc   r7   r   r   r%   r%   r&   Ścollect_symbols3·  s
   ’z4TestSymbolic.test_traverse.<locals>.collect_symbols3)r   Śtraverser   r   Śset)r*   r.   r/   rQ   r   r   r   r   r%   )r   r   r-   r&   Śtest_traverse  sF   "’’’	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sJ ||   |   ”|| |fks°J ||   |   ”|| |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>Ō  s    z0TestSymbolic.test_linear_solve.<locals>.<lambda>)r   r¢   r   ŚpytestŚ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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.   r0   r   r2   )r   r   r   ©r*   r-   r.   rC   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.   r0   )r   r   Śpolynomial_atomsr    rØ   r%   r%   r&   Śtest_polynomial_atomsć  s    ("z"TestSymbolic.test_polynomial_atomsN)Ś__name__Ś
__module__Ś__qualname__r,   rR   re   rs   r{   r}   r   r”   r§   r©   r«   r%   r%   r%   r&   r   #   s    Q1 @^>r   )!r¤   Ś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