a ;jg@sdZdgZddlZddlZddlmZddlmZGdddeZGdd d eZ Gd d d eZ Gd d d eZ Gddde Z GdddeZefZeefZddZGdddeZddZGdddZddZddZddZd[d d!Zd\d"d#Zd]d$d%Zd^d'd(Zd)d*Zd_d+d,Z d-d.Z!d/d0Z"d1d2Z#d3d4Z$d5d6Z%d7d8Z&d9d:Z'd;d<Z(d=d>Z)d?d@Z*dAdBZ+dCdDZ,dEdFZ-dGdHZ.dIdJZ/e/Z0dKdLZ1dMdNZ2dOdPZ3dQdRZ4dSdTZ5ej6fdUdVZ7GdWdXdXZ8GdYdZdZZ9dS)`aFortran/C symbolic expressions References: - J3/21-007: Draft Fortran 202x. https://j3-fortran.org/doc/year/21/21-007.pdf Copyright 1999 -- 2011 Pearu Peterson all rights reserved. Copyright 2011 -- present NumPy Developers. Permission to use, modify, and distribute this software is given under the terms of the NumPy License. NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. ExprN)Enum)gcdc@seZdZdZdZdZdZdS)Languagez2 Used as Expr.tostring language argument. rN)__name__ __module__ __qualname____doc__PythonFortranCrr=/usr/local/lib/python3.9/site-packages/numpy/f2py/symbolic.pyr$src@sLeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdS)Opz$ Used as Expr op attribute. (di,iii i N)rr r r INTEGERREALCOMPLEXSTRINGARRAYSYMBOLTERNARYAPPLYINDEXINGCONCAT RELATIONALTERMSFACTORSREFDEREFrrrrr-s rc@sHeZdZdZdZdZdZdZdZdZ e e j fdd Z e j fd d Zd S) RelOpzH Used in Op.RELATIONAL expression to specify the function part. rrcCsR|tjur0tjtjtjtjtjtjd| Stjtjtjtjtjtjd|S)N).eq..ne..lt..le..gt..ge.)==!=<<=>>=) rr r+EQNELTLEGTGElower)clsslanguagerrr fromstringMs   zRelOp.fromstringc Csb|tjur6tjdtjdtjdtjdtjdtjdi|Stjdtjdtjd tjd tjd tjd i|S) Nr0r1r2r3r4r5r6r7r8r9r:r;) rr r+r<r=r>r?r@rAselfrErrrtostringVs       zRelOp.tostringN)rr r r r<r=r>r?r@rA classmethodrrrFrIrrrrr+Bsr+c@s,eZdZdZdZdZdZdZdZdZ dZ d S) ArithOpzC Used in Op.APPLY expression to specify the function part. rrr,r-r.r/N) rr r r ZPOSZNEGZADDZSUBZMULDIVPOWrrrrrK`srKc@s eZdZdS)OpErrorNrr r rrrrrOmsrOc@sDeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdS) Precedencez4 Used as Expr.tostring precedence argument. rrrr,r-r/rL r rrN)rr r r ATOMPOWERUNARYPRODUCTSUMr>r<ZLANDZLORr"ZASSIGNTUPLENONErrrrrQqsrQcCs<||}|dur|||<n||}|r2|||<n||=dSN)get)dkvcrrr _pairs_adds   rbc@s eZdZdS) ExprWarningNrPrrrrrcsrccCstj|tdddS)Nr) stacklevel)warningswarnrc)messagerrrewarnsrhc@s$eZdZdZeejfddZddZddZ dd Z d d Z d d Z ddZ ddZddZddZejejfddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Z d0d1Z!d2d3Z"d4d5Z#d6d7Z$d8d9Z%d:d;Z&dd?Z(d@dAZ)dBS)CrzfRepresents a Fortran expression as a op-data pair. Expr instances are hashable and sortable. cCs t||dS)z.Parse a Fortran expression to a Expr. rE)rF)rDrErrrparsesz Expr.parsecCs0t|tsJ|tjurbt|tr.t|dks2Jt|dtsDJt|dttfs^J|n|tjurt|trt|dksJt|dtsJt|dttfsJ|nj|tj urt|trt|dksJnB|tj ur`t|trt|dksJt|dtr<|dddt|dddvs@Jt|dttfs J|n|tj urt |dus Jn|tj tjfvrt|tsJtdd|Ds J|n\|tjtjfvrt|ts Jn6|tjurTt|trt|dksJt |ddus*Jt|dts>Jt|dts Jn|tjurt|trzt|dks~Jt |ddus Jn|tjurt|trt|dks Jn^|tjtjfvrt|ts Jn:|tjurt|tr t|dks Jntd|||_||_dS) Nrrr)z""z''z@@css|]}t|tVqdSr\) isinstancer.0itemrrr z Expr.__init__..r,z$unknown op or missing sanity check: )rkrrtuplelenintstrrfloatrrr!hashr r%allr'r(dictr#r$r"r)r*rr&NotImplementedErroropdata)rHrzr{rrr__init__sV              z Expr.__init__cCs"t|to |j|juo |j|jkSr\)rkrrzr{rHotherrrr__eq__s    z Expr.__eq__cCsl|jtjtjfvr&tt|j}n8|jtjurX|jddtt|jd}n|j}t |j|fSNr) rzrr'r(rqsortedr{itemsr#rv)rHr{rrr__hash__s  &z Expr.__hash__cCst|tr|j|jur&|jj|jjkS|jtjtjfvr\tt|j tt|j kS|jtj ur|j dd|j ddkr|j dd|j ddkStt|j d tt|j d kS|j |j kSt Sr) rkrrzvaluerr'r(rqrr{rr#NotImplementedr}rrr__lt__s    z Expr.__lt__cCs||kp||kSr\rr}rrr__le__rpz Expr.__le__cCs ||k Sr\rr}rrr__gt__ rpz Expr.__gt__cCs ||k Sr\rr}rrr__ge__ rpz Expr.__ge__cCs t|jd|jd|jdSN(, ))typerrzr{rHrrr__repr__sz Expr.__repr__cCs|Sr\)rIrrrr__str__sz Expr.__str__csv|jtjtjfvr`|jddkr&tjntj}t|jd|jddkrVd|jdnd}n|jtj urd fdd|jD}d |d }tj}n|jtj urtj}t|j}n|jtj ur|jd}|jddkr|jdd|}tj}n\|jtj ur:d fd d|jD}d |d }tj}n|jtjur$g}t|jD]\}}|dkrxd}| }nd}|dkr|jtjd}n2|tdkrt|}n|d|jtjd}|r||n|dkr|d||qZd |p d}|rtjntj}n4|jtjurg} g} t|jD]\} } d}| dkrp| jtjd} ntjur| tddvr| jtjd} d | g| } nX| tddvr| jtjd} | | g| 7} qHn"| jtjd} d| d| d } n| jtjdd| } | r2| || | qH| rl| sV| dg7} | dd d | d g7} d | pzd}| rtjntj}n|jtjur8|j\}}}|tjurtjurfdd|D\}}|d|}tj}nDfdd|D}|dd|D7}|d d |d }tj}n |jtjur|jd}fd d|jdd!D}|d d |d }tj}n|jtjur‡fd"d|jD}d# |}tj}n|jtj urzfd$d|jD\}}}tjurd |d%|d&|d }nbtj!ur6d |d'|d(|d }n<tj"ur\d)|d|d|d }nt#d*|jd+tj}n|jtj$urd,|jjtj%d}tj%}n|jtj&urd-|jjtj%d}tj%}n|jtj'urH|j\}}}|t(j)t(j*fvrtj)ntj+}|j|d}|j|d}|jd}|d.|d.|}nt#d/|j|j,|j,krrd |d S|S)0z0Return a string representation of Expr. rrr-_rc3s|]}|jtjdVqdSriNrIrQrZrlrirrrosz Expr.tostring..rrc3s|]}|jtjdVqdSrrrlrirrro+s[]z -  + ri * -0rrizpow(z ** 1/csg|]}|jtjdqSrirIrQrXrmargrirr ksz!Expr.tostring..z / csg|]}|jtjdqSrrrrirrrqscSs$g|]\}}|d|tjqS)=)rIrQr[rmr_r`rrrrsscsg|]}|jtjdqSrrrrirrrysNcsg|]}|jtjdqSrrrrirrr~sz // csg|]}|jtjdqSrrrmarirrrs?:z if z else zmerge(z tostring for z and &* ztostring for op )-rzrrrr{rQrYrUrtrjoinr!rr r'rrrI as_numberrXappendr(rrrangerZrVr#rKrMr$r%r"r r ryr)rWr*r&r+r<r=r>r)rHZparent_precedencerE precedencerZtermstermcoeffrzZfactorstailbaseexpfactornameargskwargsnumerdenomcondexpr1expr2ropleftrightrrirrIs.                                          z Expr.tostringcCs|Sr\rrrrr__pos__sz Expr.__pos__cCs|dS)Nrrrrr__neg__sz Expr.__neg__c Cst|}t|tr|j|jur|jtjtjfvr^t|jd|jdt |jd|jdS|jtj ur|j\}}|j\}}t ||||S|jtj urt|jt |j}|jD]\}}t|j||qt|S|jtj ur|jtjtjfvr|t |S|jtjtjfvr4|jtj ur4t ||S|jtjurf|jtjurf|t||jddS|jtjur|jtjurt||jdd|St|t|StSNrr)kind)as_exprrkrrzrrrrr{maxr as_complexr'rxrrb normalizeas_realas_termsr) rHr~r1i1r2i2rr_r`rrr__add__s6      " " z Expr.__add__cCst|trt||StSr\rk number_typesrrr}rrr__radd__s  z Expr.__radd__cCs || Sr\rr}rrr__sub__sz Expr.__sub__cCst|trt||StSr\rr}rrr__rsub__s  z Expr.__rsub__c CsVt|}t|trR|j|jurN|jtjtjfvr`t|jd|jdt |jd|jdS|jtj ur|j\}}|j\}}t ||||||||S|jtj urt|jt |j}|jD]\}}t|j||qt|S|jtjurNt|ji}|jD]6\} } |jD] \} } t|j| | | | q qt|S|jtj ur||jtjtjfvr||t |S|jtj ur|jtjtjfvrt ||S|jtjur|jtjur|t||jddS|jtjur|jtjurt||jdd|S|jtjur(|t|S|jtjurBt||St|t|StSr)rrkrrzrrrrr{rrrr(rxrrbrr'rr as_factorsr) rHr~rrrrrr_r`t1c1t2c2rrr__mul__sH    "  " "   z Expr.__mul__cCst|trt||StSr\rr}rrr__rmul__s  z Expr.__rmul__cCst|}t|tr|jtjur|jd}|dkr8tdS|dkrD|S|dkr|jtjurt|ji}|j D]\}}|||j|<qnt |S|||dS|dkr|| dSttj||iSt t j ||StS)Nrrr)rrkrrzrrr{rr(rras_applyrKrNr)rHr~exponentrr_r`rrr__pow__s(     z Expr.__pow__cCs(t|}t|tr$tttj||StSr\)rrkrrrrKrMrr}rrr __truediv__s zExpr.__truediv__cCst|}t|tr||StSr\rrkrrr}rrr __rtruediv__"s zExpr.__rtruediv__cCs*t|}t|tr&tttj||fStSr\)rrkrrrr%rr}rrr __floordiv__(s zExpr.__floordiv__cCst|}t|tr||StSr\rr}rrr __rfloordiv__0s zExpr.__rfloordiv__cOs.t|gtt|Ritdd|DS)Ncss|]\}}|t|fVqdSr\rrrrrro=rpz Expr.__call__..)rmaprrxr)rHrrrrr__call__6sz Expr.__call__cCsFt|}t|ts|f}t|dkr4td|dttj|f|S)Nrz/C-index should be a single expression but got ``)rrkrqrrrhrrr$)rHindexrrr __getitem__?s   zExpr.__getitem__csb|jtjurh|}|dur"|Std|j}|rd|\}}|dvrPt|S|dksdJ||f|S|jtj tj tj fvr|S|jtj tj fvrt|jtfdd|jDS|jtjurtt|jtfdd|jDS|jtjurVd}|jD]6\}}|dur"||}n|||7}q|durRtdtd S|S|jtjurd}|jD]6\} } |dur| | }n|| | 9}qr|durtd td S|S|jtjur>|j\} } } t| tr| } tfd d| D} tfd d| D} tt|j| | | fS|jtjur|jd }t|trl|}tfdd|jd dD} tt|j|f| S|jtjurtfdd|jD}tt|j|S|jtjtjfvrtt|j|jS|jtjurH|j\}}}|}|}tt|j|||fSt d|jd|dS)zRecursively substitute symbols with values in symbols map. Symbols map is a dictionary of symbol-expression pairs. Nz$\A(@__f2py_PARENTHESIS_(\w+)_\d+@)\ZROUNDDIVSQUAREROUNDc3s|]}|VqdSr\ substituterl symbols_maprrro]sz"Expr.substitute..c3s|]}|VqdSr\rrlrrrro`sz?substitute: empty TERMS expression interpreted as int-literal 0rzAsubstitute: empty FACTORS expression interpreted as int-literal 1rc3s|]}|VqdSr\rrrrrro~rpc3s |]\}}||fVqdSr\rrrrrrosc3s|]}|VqdSr\rrrrrrorpc3s|]}|VqdSr\rrrrrrorpzsubstitute method for z: )!rzrr!r]rematchr{groupsas_arrayrrrr rrrqr%rr'rrrhrr(r#rkrxr$r"r)r*r&ry)rHrrmrparenrrrrrtargetrrfuncoperandsrrrrrrrIs                     zExpr.substitutecs|gRi}|dur"|S|jtjtjtjtjfvr@|S|jtjtjtjtj fvrt t |jt fdd|j DS|jtjtjfvri}|j D]d\}}|jgRi}t|t r|jgRin|}||vr|||}|||<qt t |j|S|jtjur|j d}t|t rV|jgRin|} t fdd|j dD} tfdd|j dD} t t |j| | | fS|jtjur.|j d}t|t r|jgRin|}t fd d|j ddD} t t |j|f| S|jtjtjfvrht t |j|j jgRiS|jtjur|j \} }}|jgRi}|jgRi}t t |j| ||fStd |jdS) aBTraverse expression tree with visit function. The visit function is applied to an expression with given args and kwargs. Traverse call returns an expression returned by visit when not None, otherwise return a new normalized expression with traverse-visit sub-expressions. Nc3s&|]}|jgRiVqdSr\traverserlrrvisitrrrosz Expr.traverse..rc3s&|]}|jgRiVqdSr\rrmoperandrrrrosrc3s.|]&\}}||jgRifVqdSr\rrrrrrosrc3s&|]}|jgRiVqdSr\r)rmrrrrrosztraverse method for )rzrrrrr!rr r%r"rrrqr{r'r(rrrkr#rxr$r)r*r&ry)rHrrrresultr{r_r`objrrZ kwoperandsindicesrrrrrrrsl          z Expr.traversecs*g}|ffdd }||t|dkS)z&Check if self contains other. cs"|r|S|kr|d|SdS)Nr)rexprfoundr~rrrs  zExpr.contains..visitr)rrr)rHr~r rrr rcontainss z Expr.containscCs t}|fdd}|||S)z3Return a set of symbols contained in self. cSs|jtjur||dSr\)rzrr!addrrrrrs zExpr.symbols..visitsetr)rHr rrrrsymbolss  z Expr.symbolscs$t}|ffdd ||S)zFReturn a set of expressions used as atoms in polynomial self. cs|jtjur&|jD]}|q|S|jtjtjfvr.visitr )rHr rrrpolynomial_atomss zExpr.polynomial_atomsc Csz||tdi}||}||tdi}t|||\}}|tdkrrtd|d|d|d|d| ||fS)zReturn a, b such that a * symbol + b == self. If self is not linear with respect to symbol, raise RuntimeError. rrznot a z-linear equation: rrz == )rras_numer_denom RuntimeError)rHsymbolraxrzerorrrr linear_solves  zExpr.linear_solveN)*rr r r staticmethodrrrjr|rrrrrrrrrQr[r rIrrrrrrrrrrrrrrrrrr rrrrrrrrsJB  )  K8 cCs"t|ts|S|jtjuri}|jD]p\}}|dkr:q(|jtjurZ|dkrZ||}d}|jtjur|jD]\}}t||||qpq(t|||q(t |dkrt dSt |dkr|\\}}|dkr|Sttj|S|jtj urd}i}|jD]\}}|dkrq|jtjurPt|t rP|dkrP|||d}d}|jtj tjfvr|dkr~||jd9}n*|dkr||jd|9}n t|||nf|jtj ur|dkrt|t r|jD]\} } t|| | |qn t|||n t|||qt |dks,|dkrDt|ts.)rrr#rqrrrxr)rrrrrrrs rcCsttj|||fS)zr2rrras_ltsr5cCsttjtj||fSr\)rrr&r+r?r2rrras_lesr6cCsttjtj||fSr\)rrr&r+r@r2rrras_gtsr7cCsttjtj||fSr\)rrr&r+rAr2rrras_gesr8cCst|trt|}|jtjur"|S|jtjurPttjtd|jd|jdiS|jtj ur~ttjt d|jd|jdiSttj|diSt dt |ddS)z+Return expression as TERMS expression. rrr+ to terms ExprN) rkrrrzrr'rr-r{rrrOrr)rrrr#s   " "rcCst|trt|}|jtjur"|S|jtjur~t|jdkr~|j \\}}|dkrdttj|diSttj|dt |diS|jtj ur|jdt j ur|jdsttj|jddd|jdddiSttj|diStdt|ddS)z-Return expression as FACTORS expression. rrrrr+r9N)rkrrrzrr(r'rrr{rnumberr#rKrMrOr)rrrrrrr2s$    (rcCst|trt|}|jtjur8td|jd|jdfS|jtjur^t d|jd|jdfS|jtj urt |jdkr|j \\}}||fS|jtj ur|jdtjurt|jdd\}}ttj||jdd|fS|dfStdt|ddS)z0Return expression as term-coefficient pair. rrr+z to term and coeffN)rkrrrzrrr-r{rrr'rrrr#rKrMrrrOr)rrrrrarrrrGs    rcCsNt|tr6t|}|jtjtjtjtjtj tj fvrB|t dfS|jtj ur|j dtjur|j dstt|j d\}}|d|d|d|dfS|t dfS|jtjurgg}}|j D]0\}}t|\}}||}||||qt dt d}}tt|D]L} || }tt|D]} | | kr2||| 9}q2||7}||| 9}q|jtjtjfvr|j ddkr| | }}||fS|jtjur6t dt d}}|j D]`\} } t| \} }| dkr|| | 9}||| 9}n&| dkr||| 9}|| | 9}q||fStdt|ddS)z+Return expression as numer-denom pair. rrrr+z to numer and denomN)rkrrrzrrrrr!r$r"rr#r{rKrMrrr'rrrrrr(rOr)rZnumersZdenomsrrnr^rrijrrZbnumerZbdenomrrrr\sR          $    rccsd}|d7}|VqdSrr)counterrrr_countersr?csJifdd}tdjdddd||}d|vs6Jd |vsBJ|fS) zgReplace quoted substrings of input string. Return a new string and a mapping of replacements. cs\|dd\}}|r$|dd}ddd|d}|d|dtd }||<|S) NrrZSINGLEDOUBLE)'"rz@__f2py_QUOTES_r@)rCOUNTER__next__)rrrpr_r^rrrepls zeliminate_quotes..replz+({kind}_|)({single_quoted}|{double_quoted})z \w[\w\d_]*z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))r single_quotedZ double_quotedrBrA)rsubformat)rDrHZnew_srrGreliminate_quotess   rLcCsD|D]6\}}|d|d}|r.|d7}||||}q|S)z!Inverse of eliminate_quotes. NrCr)rfindreplace)rDr^r_r`rrrr insert_quotess rOc Cs6d\}}t|}dD]2\}}||}|dkr0q||kr|}||}}q|durX|ifS|}|||}|||d||||d|kr|||d}|dkrhtd||d|qhdd d d d |}d |dtd} ||t||} t||t|d\} } | | | <|d|| | | fS)zzReplace substrings of input that are enclosed in parenthesis. Return a new string and a mapping of replacements. )NN))(//)z()z{}z[]rNrz Mismatch of z parenthesis in rrCURLYr)rr{rP@__f2py_PARENTHESIS_rrC)rrrMcount ValueErrorrDrEreplace_parenthesis) rDrrZmn_iZleft_Zright_r<r=rFr_r`rr^rrrrWs.     $rWcCs |dsJ||ddS)NrTrr-) startswithsplit)rDrrr_get_parenthesis_kindsrZcCsZ|D]L\}}t|}tddddd|}tdddd d|}|||||}q|S) z$Inverse of replace_parenthesis. rrrSrP)rrrRrrr}rQ)rrZrxrN)rDr^r_r`rFrrrrrunreplace_parenthesiss r\cCs8t|d|}t|tr|Std|d|ddS)zCreate an expression from a string. This is a "lazy" parser, that is, only arithmetic operations are resolved, non-arithmetic operations are treated as symbols. rizfailed to parse `z` to Expr instance: got `rN)_FromStringWorkerrjrkrrV)rDrErrrrrFs rFc@s$eZdZddZddZddZdS)_PaircCs||_||_dSr\r2)rHrrrrrr|sz_Pair.__init__cCs@|j|j}}t|tr"||}t|tr6||}t||Sr\)rrrkrrr^)rHrrrrrrr s     z_Pair.substitutecCs t|jd|jd|jdSr)rrrrrrrrrsz_Pair.__repr__N)rr r r|rrrrrrr^sr^c@s4eZdZejfddZddZddZd dd Zd S) r]cCsd|_d|_||_dSr\)original quotes_maprErGrrrr|sz_FromStringWorker.__init__cCs t||jSr\)rOr`)rHrDrrrfinalize_stringsz!_FromStringWorker.finalize_stringcCs||_t|\}|_||Sr\)r_rLr`process)rHinpZunquotedrrrrj sz_FromStringWorker.parsercst|ttfr*t|fdd|DSt|tsDJt||ft|\}|}fddd|vrȈ|d}dkrt|Sdkrt |dkrt |St d d |t d |}|r&dksJ|\}}}|}|}|}t|||SjtjurFt d |t j}n t d |}|r|\} } } jtjurd| d} | | f\} } tj| jd} ttj| | | fSt d|}|r|\} } | } t| | St d|}t |dkr|dpd}t|ddd|dddD]J\}}|}|}|dkrp||7}n|dks~J||8}q>|Sjtjurd|vrʈ|d}ttjt|St djtjur|n |dd}t |dkr|}jtjur"dd|D}|d}t|ddd|dddD]F\}}|}|}|dkr|||9}n|dksJ||}qN|S|ds|d rtjtj d!|d}|dd}t||SjtjurNd|vrNtt!|d}|d}|ddD]}|}||}q0|St d"j"d#d$d%|}|r|\} }}|r|#rt$|}t%t$| |pd&St d'j"d(d)d$d*|}|r,|\} }}}|r|#rt$|}| &} d+| vrt't(| d+d,|pd-St't(| |p(d&S|j)vr`|d|*d.}t+j)||p\dS|vrt,|}||d/krdnd}|d/krt|tr|S|d0vrt|tr|f}t-|St d1|}|r|\}}}|}|dd2d}t|ts*|f}|d/krnt.d3d|D}td4d|D}t/|g|Ri|S|d5ks|J||St d6|}|rt0|S1|}t2d7|d8j3d9t0|S):aParse string within the given context. The context may define the result in case of ambiguous expressions. For instance, consider expressions `f(x, y)` and `(x, y) + (a, b)` where `f` is a function and pair `(x, y)` denotes complex number. Specifying context as "args" or "expr", the subexpression `(x, y)` will be parse to an argument list or to a complex number, respectively. c3s|]}|VqdSr\)rb)rmZs_)contextrHrrro0rpz,_FromStringWorker.process..cs*t|ttfr t|t|St|Sr\)rklistrqrrr\)r)raw_symbols_maprestorerrrg8sz*_FromStringWorker.process..restore,rrrz&parsing comma-separated list (context=z): z\A([^?]+)[?]([^:]+)[:](.+)\Zz+\A(.+)\s*[.](eq|ne|lt|le|gt|ge)[.]\s*(.+)\Zz7\A(.+)\s*([=][=]|[!][=]|[<][=]|[<]|[>][=]|[>])\s*(.+)\Z.riz\A(\w[\w\d_]*)\s*[=](.*)\Zz((?.rrr)rrz\A({digit_string})({kind}|)\Zz\d+z_(\d+|\w[\w\d_]*))Z digit_stringrr-z7\A({significant}({exponent}|)|\d+{exponent})({kind}|)\Zz[.]\d+|\d+[.]\d*z[edED][+-]?\d+)Z significantrrr^rrCrrz4\A(.+)\s*(@__f2py_PARENTHESIS_(ROUND|SQUARE)_\d+@)\Zrcss$|]}t|tr|j|jfVqdSr\)rkr^rrrrrrros css|]}t|ts|VqdSr\)rkr^rrrrrorprz\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r)4rkrerqrrtrWstriprYrbrrrryrrrr.rErr Ir+rFrrr&r^zipr%rrNrXr*r)reversedrKisdigitrsr-rBrrur`rMrrZrrxrr*rarhr_)rHrDrdrrroperrrrrrZkeynamerrrzrrrrrrrrr)rdrfrgrHrrb%s2            &     &                 z_FromStringWorker.processN)r) rr r rrr|rarjrbrrrrr]sr])r-)r-)r-)r)r):r __all__rreenumrmathrrrr+rK ExceptionrOrQrsrrurrb UserWarningrcrhrrrr*rr-rrrrrr.r0r1r3r4r5r6r7r8rrrrr?rDrLrOrWrZr\rrFr^r]rrrrsn     ~    - +