a ;jg¥Gã@sžddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZGdd„dejƒZ dS)é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@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)Ú TestSymboliccCsrdd„}dD]`}||dƒ||d|dƒ||dƒ||d|dƒ||d ƒ|d |d ƒq dS) NcSs&t|ƒ\}}t||ƒ}||ks"J‚dS©N)r r)ÚsÚrÚdÚs1©r%úH/usr/local/lib/python3.9/site-packages/numpy/f2py/tests/test_symbolic.pyÚworker%s  z2TestSymbolic.test_eliminate_quotes..worker)ÚZmykind_z"1234" // "ABCD"z "1234" // z"ABCD"z"1234" // 'ABCD'z'ABCD'z "1\"2'AB'34"za = z '1\'2"AB"34'r%)Úselfr'Úkindr%r%r&Útest_eliminate_quotes$s   z"TestSymbolic.test_eliminate_quotescCsœtdƒ}tdƒ}tdƒ}|jtjks(J‚t|ƒdks8J‚||ksDJ‚||ksPJ‚t|ƒdus`J‚tdƒ}tdƒ}|jtjks€J‚t|ƒdksJ‚||ksœJ‚||ks¨J‚t|ƒdus¸J‚tdƒ}td ƒ}|jtjksØJ‚t|ƒd ksèJ‚||ksôJ‚||ksJ‚t|ƒdusJ‚t d d ƒ}t d dƒ} |jtj ks:J‚t|ƒdksLJ‚||ksZJ‚|| kshJ‚t|ƒduszJ‚t dƒ} t dƒ} | jtj ksœJ‚t| ƒdks¶Jt| ƒƒ‚| | ksÄJ‚| | ksÒJ‚t ||fƒ} t |fƒ} | jtjksúJ‚t| ƒdks J‚| | ksJ‚| | ks(J‚t|ƒ}t|ƒ}|jtjksJJ‚t|ƒdks\J‚||ksjJ‚||ksxJ‚t|ƒdusŠJ‚t|ƒ}t|ƒ}|jtjks¬J‚t|ƒdks¾J‚||ksÌJ‚||ksÚJ‚t|ƒdusìJ‚t|||ƒ}t|||ƒ}|jtjksJ‚||ks$J‚||ks2J‚t|ƒdusDJ‚t||ƒ}t||ƒ}|jtjksjJ‚||ksxJ‚||ks†J‚t|ƒdus˜J‚dS)NÚxÚyÚzzExpr(Op.SYMBOL, 'x')é{éÈzExpr(Op.INTEGER, (123, 4))gš™™™™™(@gÍÌÌÌÌÌF@zExpr(Op.REAL, (12.3, 4))rééézFExpr(Op.COMPLEX, (Expr(Op.INTEGER, (1, 4)), Expr(Op.INTEGER, (2, 4))))z'123'ú"ABC"zExpr(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ÚINTEGERZREALr ZCOMPLEXrÚSTRINGr ZARRAYr ÚTERMSr ÚFACTORSrZTERNARYrrZ RELATIONAL)r)r,r-r.ÚnÚmÚfnÚfmÚcÚc2r!Ús2ÚaÚbÚtÚuÚvÚwÚeÚfr%r%r&Ú test_sanity2s†             zTestSymbolic.test_sanityc Cstdƒ}tdƒ}tdƒ}tdƒ}tdƒ}t||fƒ}t||ƒ}t|ƒdksNJ‚t|ƒdks^J‚t|ƒdksnJ‚t|ƒdks~J‚tttj|d iƒƒdksšJ‚tttj|d iƒƒd ks¶J‚tttj|d iƒƒd ksÒJ‚tttj|diƒƒdksîJ‚tttj|d |d iƒƒdksJ‚tttj|d |d iƒƒdks2J‚tttj|d |diƒƒdksTJ‚tttj|d|diƒƒdksvJ‚tttj|d |diƒƒdks˜J‚tttj|d iƒƒdks¶J‚tttj|d iƒƒdksÔJ‚tttj|d iƒƒdksòJ‚tttj|diƒƒdksJ‚tttj|d |d iƒƒdks2J‚tttj|d |diƒƒdksTJ‚ttj|d ttj|d |d iƒdiƒ}t|ƒdks’Jt|ƒƒ‚ttj|d ttj|d |d iƒdiƒ}t|ƒdksÐJt|ƒƒ‚tttj ddifƒƒd ksðJ‚tttj d|fifƒƒd!ksJ‚tttj d||fifƒƒd"ks6J‚tttj d|fƒƒd#ksTJ‚tt |||ƒƒd$ksnJ‚tt ||ƒƒd%ks†J‚tt ||ƒƒd&ksžJ‚tt||ƒƒd'ks¶J‚tt||ƒƒd(ksÎJ‚tt||ƒƒd)ksæJ‚tt||ƒƒd*ksþJ‚dS)+Nr,r-r.r/r0Ú123z [123, 456]z (123, 456)rr1z2 * xéÿÿÿÿz-xéþÿÿÿz-2 * xúx + yz-x - yr2z 2 * x + 3 * yz-2 * x + 3 * yéýÿÿÿz 2 * x - 3 * yúx ** 2zx ** -1zx ** -2úx * yzx ** 2 * y ** 3zx ** 2 * (x + y) ** 3zx ** 2 * (x * y) ** 3rKr%zf()úf(x)zf(x, y)úf[x]zmerge(y, z, x)úx .eq. yúx .ne. yúx .lt. yúx .le. yúx .gt. yúx .ge. y)rrr r Ústrrrr;r<ÚAPPLYZINDEXINGrrrrrrr) r)r,r-r.r=r>rDrArHr%r%r&Útest_tostring_fortranƒsR  """""""$$ "$z"TestSymbolic.test_tostring_fortrancCsätj}tdƒ}tdƒ}tdƒ}tdƒ}ttj|diƒj|ddksFJ‚ttj||diƒj|ddksjJ‚ttj|d iƒj|dd ksŠJ‚tt j ||ƒj|dd ks¨J‚tt j |||ƒj|dd ksÊJ‚tt j ||||ƒj|dd ksðJ‚||||||j|ddksJ‚t |||ƒj|ddks8J‚t ||ƒj|ddksTJ‚t ||ƒj|ddkspJ‚t||ƒj|ddksŒJ‚t||ƒj|ddks¨J‚t||ƒj|ddksÄJ‚t||ƒj|ddksàJ‚dS)Nr,r-r.r/r1©Úlanguagezx * xz(x + y) * (x + y)é z pow(x, 12)úx / yz x / (x + y)z(x - y) / (x + y)z123 + x + (x - y) / (x + y)z(x?y:z)úx == yúx != yúx < yúx <= yúx > yúx >= y)rÚCrrrrr<ZtostringrrÚDIVrrrrrrr)r)r`r,r-r.r=r%r%r&Útest_tostring_c´sn ÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿ zTestSymbolic.test_tostring_cc Cs"tdƒ}tdƒ}tdƒ}||ttj|diƒks4J‚||ttjdƒksLJ‚||ttj|d|diƒkslJ‚||ttj|d|diƒksŒJ‚||ttj|diƒks¨J‚||ttj|d|diƒksÈJ‚| |ksÖJ‚| ttj|diƒksúJt| ƒƒ‚d|ttj|diƒksJ‚d|ttj|dtdƒdiƒks>J‚d|d|ttj|d|diƒkshJ‚||dttj|d|diƒksŽJ‚|dttj|diƒks¬J‚||dttjttj|diƒdttj|diƒdttj|d|diƒdiƒksþJ‚||||d||ks J‚||d|dd|||dksNJ‚||d||dd|dd|dks„J‚|||||||ks¦J‚|||||||ksÈJ‚|dtt j |tdƒƒksèJ‚d|d|ksþJ‚d|dtt j d|tdƒƒks&J‚d |dd|ks@J‚d |dtt j d |tdƒƒkshJ‚d |dd|ks‚J‚d |d tt j d |tdƒƒksªJ‚d |d|d d|d|dtt j d |d |ƒksîJ‚d |d d tt j |tdƒƒks&Jd |d d ƒ‚|d |tt j |dtd ƒƒksNJ‚|dttj|diƒkslJ‚t dƒ}t dƒ}||ttj dƒks–J‚||ttj ||fƒks´J‚||ttj ||fƒksÒJ‚tddƒ}| tddƒksòJ‚||tdƒksJ‚||tdƒksJ‚dS)Nr,r-r.r1)rr3rrNr2r3ééééég@gà?r4ú"123")z"ABC123"rgð?gð¿gÀy@@yÀ@)rrrr;r9r<r7rrrrjrr:ZCONCATr r)r)r,r-r.r!rFrAr%r%r&Útest_operationsÔst   $&*& þúþ ".6"" ((((ÿ ÿ ÿ( zTestSymbolic.test_operationscCsVtdƒ}tdƒ}tdƒ}t||fƒ}| ||i¡|ks:J‚|| ||i¡||ksXJ‚|| ||i¡||ksvJ‚|d ||i¡|dks”J‚|| ||i¡||ks²J‚| |||i¡||ksÐJ‚| |||i¡t|||fƒksöJ‚t|||ƒ |||i¡t||||ƒks&J‚t||ƒ |||i¡t|||ƒksRJ‚dS)Nr,r-r.r3)rr Ú substituterr)r)r,r-r.rDr%r%r&Útest_substitutes& &ÿ ÿÿ zTestSymbolic.test_substitutec Cs>tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}t||fƒ}tdƒ|ksLJ‚tdƒ|ks\J‚tdƒ| ksnJ‚td ƒ||ks‚J‚td ƒ|d ks–J‚td ƒ||ksªJ‚td ƒ|dks¾J‚tdƒ||ksÒJ‚tdtjd|dksìJ‚tdtjd|dksJ‚tdƒ|||ks"J‚tdƒ||ƒks8J‚tdƒ|||ƒksPJ‚tdƒ||ksfJ‚tdƒ|||ks€J‚tdƒ|ks’J‚ttdtjdƒ||ks²J‚tdƒ||ƒksÈJ‚tdƒtddƒksàJ‚tdƒ|ksúJtdƒƒ‚tdƒ||ƒksJ‚tdƒt|||fƒks0J‚td ƒtd!ƒksFJ‚td"ƒtd!dƒks^J‚td#ƒtd!d$ƒksvJ‚td%ƒtd&d'ƒksŽJ‚td(ƒtd&d'ƒks¦J‚td)ƒtd&dƒks¾J‚td*ƒtd&d'ƒksÖJ‚td+ƒtd&dƒksîJ‚td,ƒtd&dƒksJ‚td-ƒtd&d'ƒksJ‚td.ƒtd&dƒks6J‚td/ƒtd&d0ƒksNJ‚td1ƒtd2d'ƒksfJ‚td3ƒt d dƒks~J‚td4ƒt td5ƒtd6ƒƒksžJ‚td7ƒttd ƒtdƒfƒksÀJ‚td8ƒt td9ƒ|td ƒd:ksäJ‚td;ƒt td<ƒtd=ƒtd>ƒttd?ƒtd@ƒfƒdAksJ‚tdBƒt |||ƒks8J‚tdCƒt |ƒksNJ‚tdDƒt t |ƒƒkshJ‚tdEƒt |ƒks~J‚tdFƒt |ƒt |ƒksœJ‚tdGƒt |ƒt |ƒksºJ‚tdHƒt |ƒt |ƒksØJ‚tdIƒt |ƒt |ƒksöJ‚tdJƒt||ƒksJ‚tdKƒt||ƒks&J‚tdLƒt||ƒks>J‚tdMƒt||ƒksVJ‚tdNƒt||ƒksnJ‚tdOƒt||ƒks†J‚tdPtjdt||ƒks¤J‚tdQtjdt||ƒksÂJ‚tdRtjdt||ƒksàJ‚tdStjdt||ƒksþJ‚tdTtjdt||ƒksJ‚tdUtjdt||ƒks:J‚dS)VNr,r-r.rKr4rqz+ xz- xrPzx + 1rrSzx * 2r1rbrRr_z x ** 2 ** 3éz (x + y) * zrTzf(x,y)rUzf[x][y]z"ABC" // "123" zf("ABC")zMYSTRKIND_"ABC"Z MYSTRKINDz(/x, y/)z f((/x, y/))z (/(x+y)*z/)rMr/Z123_2Z 123_myintkindZ myintkindz123.0gÀ^@r3z123.0_4z123.0_8z123.0e0z123.0d0Z123d0z123e-0z123d+0z123.0_myrealkindZ myrealkindZ3E4gLÝ@z(1, 2)z (1e2, PI)gY@ZPIz[1, 2]z POINT(x, y=1)ZPOINT)r-z-PERSON(name="John", age=50, shape=(/34, 23/))ZPERSONz"John"é2é"é)ÚnameZageÚshapezx?y:zz*xz**xz&xz (*x) * (*y)z (*x) * *yz*x * *yz*x**yrcrdrergrfrhrVrWrXrZrYr[)rrr rrÚPythonrÚFortranrr rrrrrrrrrr)r)r,r-r.rKr!rFrDr%r%r&Útest_fromstring&s® ÿÿþ  ÿ "þÿüÿ zTestSymbolic.test_fromstringcstdƒ‰tdƒ}tdƒ}tdƒ}|f‡fdd„ }ˆ |¡|ksBJ‚| |¡|ksTJ‚| |¡|ksfJ‚||ƒ |¡||ƒks€J‚|ˆƒ |¡||ƒksšJ‚|| |¡||ks´J‚|| |¡||ksÎJ‚ˆ|| |¡d||ksðJ‚ˆ||ˆ|ƒ |¡|||tdƒƒks J‚tˆ|ƒ |¡t||ƒks@J‚tƒ‰tƒ‰‡‡fd d „}ˆ||ˆ|ƒ |¡ˆ|hks‚J‚ˆˆ||hks–J‚d d „}tƒ‰ˆ||ˆ|ƒ |ˆ¡ˆˆ|||hksÔJ‚d d„}tƒ‰ˆ||ˆ|ƒ |ˆ¡ˆˆhks J‚dS)Nr,r-r.rKcs|ˆkr |SdSr r%)r!r"©r,r%r&Ú replace_visit‹sz1TestSymbolic.test_traverse..replace_visitr1rcsV|jtjur4|jd}ˆ |¡|ˆvrRˆ |¡n|jtjurR|ˆvrRˆ |¡dS)Nr)r5rr]ÚdataÚaddÚremover6)r!Úoper)Úfunction_symbolsÚsymbolsr%r&Úcollect_symbols s    z3TestSymbolic.test_traverse..collect_symbolscSs|jtjur| |¡dSr )r5rr6r©Úexprr…r%r%r&Úcollect_symbols2®s z4TestSymbolic.test_traverse..collect_symbols2cSs*|jtjur|S|jtjur&| |¡dSr )r5rr]r6rr‡r%r%r&Úcollect_symbols3·s  z4TestSymbolic.test_traverse..collect_symbols3)rÚtraverserrÚset)r)r-r.rKrr†r‰rŠr%)r„r…r,r&Ú test_traverse„sJ" ÿÿ ÿÿ   zTestSymbolic.test_traversecs¦tdƒ‰tdƒ}tdƒ}ˆ ˆ¡tdƒtdƒfks6J‚ˆd ˆ¡tdƒtdƒfksXJ‚dˆ ˆ¡tdƒtdƒfkszJ‚dˆd ˆ¡tdƒtdƒfks J‚tdƒ ˆ¡tdƒtdƒfksÂJ‚| ˆ¡tdƒ|fksÜJ‚|| ˆ¡tdƒ||fksþJ‚ˆ| ˆ¡tdƒ|fksJ‚|ˆ| ˆ¡||fks>J‚||ˆ| ˆ¡|||fksfJ‚||ˆ| ˆ¡|||fksŽJ‚t t‡fdd „¡dS) Nr,r-r.rrr1r2csˆˆ ˆ¡Sr )Ú linear_solver%r~r%r&ÚÔóz0TestSymbolic.test_linear_solve..)rrŽrÚpytestZraisesÚ RuntimeError)r)r-r.r%r~r&Útest_linear_solveÂs""&""  ((zTestSymbolic.test_linear_solvecCsôtdƒ}tdƒ}tdƒ}t|ƒ|tdƒfks0J‚t||ƒ||fksHJ‚t||ƒ||fks`J‚t||ƒ||fksxJ‚t||ƒ||tdƒfks˜J‚t|||ƒ||||fks¼J‚t|||||ƒ||d|||fksðJ‚dS)Nr,r-r/rr1)rrr©r)r,r-r=r%r%r&Útest_as_numer_denomÖs $z TestSymbolic.test_as_numer_denomcCsÚtdƒ}tdƒ}tdƒ}| ¡|hks*J‚| ¡tƒks r)!r‘Znumpy.f2py.symbolicrrrrrrrr r r r r rrrrrrrrrrrrrrrr(rZF2PyTestrr%r%r%r&Úst