
    W^g                     
   d Z dgZddlZddlZddlmZ ddlmZ  G d de      Z G d d	e      Z	 G d
 de      Z
 G d de      Z G d de      Z G d de      ZefZeefZd Z G d de      Zd Z G d d      Zd Zd Zd Zd9dZd9dZd9dZd:dZd Zd;dZ d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/ e/       Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5ejl                  fd4Z7 G d5 d6      Z8 G d7 d8      Z9y)<a  Fortran/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.
Expr    N)Enum)gcdc                       e Zd ZdZdZdZdZy)Languagez2
    Used as Expr.tostring language argument.
    r         N)__name__
__module____qualname____doc__PythonFortranC     i/var/www/python.lazyprojects.co.uk/rdoDiscordBot/venv/lib/python3.12/site-packages/numpy/f2py/symbolic.pyr   r   $   s     FG	Ar   r   c                   L    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZy)Opz$
    Used as Expr op attribute.
    
               (   d            i,  i  i  i  i  N)r
   r   r   r   INTEGERREALCOMPLEXSTRINGARRAYSYMBOLTERNARYAPPLYINDEXINGCONCAT
RELATIONALTERMSFACTORSREFDEREFr   r   r   r   r   -   sT     GDGFEFGEHFJEG
CEr   r   c                   n    e Zd ZdZdZdZdZdZdZdZ	e
ej                  fd       Zej                  fd	Zy
)RelOpzH
    Used in Op.RELATIONAL expression to specify the function part.
    r   r	               c                    |t         j                  u rnt        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  d|j                            S t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  d|   S )N).eq..ne..lt..le..gt..ge.)==!=<<=>>=)
r   r   r0   EQNELTLEGTGElower)clsslanguages      r   
fromstringzRelOp.fromstringM   s    x'''!HHehh!HHehh!HHehh889	C C hhehhUXXhhUXXUXX??@B 	Br   c                    |t         j                  u ret        j                  dt        j                  dt        j
                  dt        j                  dt        j                  dt        j                  di|    S t        j                  dt        j                  dt        j
                  d	t        j                  d
t        j                  dt        j                  di|    S )Nr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   )	r   r   r0   rB   rC   rD   rE   rF   rG   selfrK   s     r   tostringzRelOp.tostringV   s    x'''HHfehhHHfehhHHfehh88<> > $$#uxx#uxx//35 	5r   N)r
   r   r   r   rB   rC   rD   rE   rF   rG   classmethodr   r   rL   rP   r   r   r   r0   r0   B   sP     
B	
B	
B	
B	
B	
B$,JJ B B !)

 5r   r0   c                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
ArithOpzC
    Used in Op.APPLY expression to specify the function part.
    r   r	   r1   r2   r3   r4      N)r
   r   r   r   POSNEGADDSUBMULDIVPOWr   r   r   rS   rS   `   s,     C
C
C
C
C
C
Cr   rS   c                       e Zd Zy)OpErrorNr
   r   r   r   r   r   r]   r]   m       r   r]   c                   D    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZy)
Precedencez4
    Used as Expr.tostring precedence argument.
    r   r   r	   r1   r2   r4   rT      r         r   r   N)r
   r   r   r   ATOMPOWERUNARYPRODUCTSUMrD   rB   LANDLORr&   ASSIGNTUPLENONEr   r   r   ra   ra   q   sJ     DEEG
C	
B	
BD
CGFEDr   ra   c                 V    | j                  |      }||| |<   y ||z   }|r|| |<   y | |= y N)get)dkvcs       r   
_pairs_addrv      s9    	aAy!EAaD!r   c                       e Zd Zy)ExprWarningNr^   r   r   r   rx   rx      r_   r   rx   c                 <    t        j                  | t        d       y )Nr	   )
stacklevel)warningswarnrx   )messages    r   ewarnr~      s    MM';15r   c                       e Zd ZdZeej                  fd       Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zej$                  ej&                  fdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd  Z(d! Z)y")#r   zfRepresents a Fortran expression as a op-data pair.

    Expr instances are hashable and sortable.
    c                     t        | |      S )z.Parse a Fortran expression to a Expr.
        rK   )rL   )rJ   rK   s     r   parsez
Expr.parse   s     !h//r   c                 @   t        |t              sJ |t        j                  u rVt        |t              rt	        |      dk(  sJ t        |d   t
              sJ t        |d   t
        t        f      sJ |       |t        j                  u rVt        |t              rt	        |      dk(  sJ t        |d   t              sJ t        |d   t
        t        f      sJ |       |t        j                  u r!t        |t              rt	        |      dk(  s}J |t        j                  u rrt        |t              rt	        |      dk(  sJ t        |d   t              r|d   d d t	        |d         dz
     dv sJ t        |d   t
        t        f      sJ |       |t        j                  u rt        |      J |t        j                  t        j                  fv r,t        |t              sJ t        d |D              sJ |       |t        j                   t        j"                  fv rt        |t$              sVJ |t        j&                  u rZt        |t              rt	        |      dk(  sJ t        |d         J t        |d   t              sJ t        |d   t$              sJ |t        j(                  u r0t        |t              rt	        |      dk(  sJ t        |d         J |t        j*                  u r t        |t              rt	        |      dk(  svJ |t        j,                  t        j.                  fv rt        |t0              sBJ |t        j2                  u r t        |t              rt	        |      dk(  sJ t5        d|       || _        || _        y )Nr	   r   r   )z""z''z@@c              3   <   K   | ]  }t        |t                y wrp   )
isinstancer   ).0items     r   	<genexpr>z Expr.__init__.<locals>.<genexpr>   s     ?$$z$-$   r1   z$unknown op or missing sanity check: )r   r   r    tuplelenintstrr!   floatr"   r#   r%   hashr$   r)   allr+   r,   dictr'   r(   r&   r-   r.   r   r*   NotImplementedErroropdata)rO   r   r   s      r   __init__zExpr.__init__   s"   "b!!!  dE*s4yA~==d1gs+++d1gSz28D82277] dE*s4yA~==d1gu---d1gSz28D822::dE*s4yA~==299_ dE*s4yA~==tAw,Q 0#d1g,q. 015GGI Hd1gSz28D82299_:)))BHHbii((dE***?$??EE?BHHbjj)) dD)))288^ dE*s4yA~==Q=,,,d1gu---d1gt,,,2;;dE*s4yA~==Q=,,,2::dE*s4yA~==BFFBHH%%dD)))2== dE*s4yA~==%6rd;= = 	r   c                     t        |t              xr3 | j                  |j                  u xr | j                  |j                  k(  S rp   )r   r   r   r   rO   others     r   __eq__zExpr.__eq__   s;    5$' ,GGuxx',II+	-r   c                    | j                   t        j                  t        j                  fv r-t	        t        | j                  j                                     }nh| j                   t        j                  u r@| j                  d d t	        t        | j                  d   j                                     z   }n| j                  }t        | j                   |f      S Nr	   )
r   r   r+   r,   r   sortedr   itemsr'   r   )rO   r   s     r   __hash__zExpr.__hash__   s    77rxx,,		 123DWW 99Ra=5		!0B0B0D)E#FFD99DTWWdO$$r   c                 h   t        |t              r| j                  |j                  ur-| j                  j                  |j                  j                  k  S | j                  t        j
                  t        j                  fv rYt        t        | j                  j                                     t        t        |j                  j                                     k  S | j                  t        j                  u r| j                  d d |j                  d d k7  r| j                  d d |j                  d d k  S t        t        | j                  d   j                                     t        t        |j                  d   j                                     k  S | j                  |j                  k  S t        S r   )r   r   r   valuer   r+   r,   r   r   r   r   r'   NotImplementedr   s     r   __lt__zExpr.__lt__   s8   eT"wwehh&ww}}uxx~~55ww288RZZ00fTYY__%678uzz'7'7'9 :;< =ww"(("99Ra=EJJrN299Ra=5::bq>99VDIIaL$6$6$89:U5::a=..01>3 3 399uzz))r   c                     | |k(  xs | |k  S rp   r   r   s     r   __le__zExpr.__le__  s    DEM$ATE\Ar   c                     | |k   S rp   r   r   s     r   __gt__zExpr.__gt__
  s    $77r   c                     | |k   S rp   r   r   s     r   __ge__zExpr.__ge__  s    $66r   c                 f    t        |       j                   d| j                   d| j                  dS N(, ))typer
   r   r   rO   s    r   __repr__zExpr.__repr__  s.    t*%%&ay499-qAAr   c                 "    | j                         S rp   )rP   r   s    r   __str__zExpr.__str__  s    }}r   c           	         | j                   t        j                  t        j                  fv rs| j                  d   dk  rt
        j                  nt
        j                  }t        | j                  d         | j                  d   dk7  rd| j                  d    ndz   }	n| j                   t        j                  u r>dj                  fd| j                  D              }d|z   d	z   }t
        j                  }n| j                   t        j                  u r't
        j                  }t        | j                        }no| j                   t        j                  u rH| j                  d   }| j                  d   dk7  r| j                  d   dz   |z   }t
        j                  }n| j                   t        j                  u r>dj                  fd
| j                  D              }d|z   dz   }t
        j                  }n| j                   t        j                  u rg }t        | j                  j!                               D ]  \  }}|dk  rd}| }nd}|dk(  r"|j#                  t
        j                        }nA|t%        d      k(  rt        |      }n'| d|j#                  t
        j&                        z   }|r|j)                  |       n|dk(  r|j)                  d       |j)                  |        dj                  |      xs d}|rt
        j                  nt
        j                  }n~| j                   t        j*                  u rg }	g }
t        | j                  j!                               D ]6  \  }}d}|dk(  r"|j#                  t
        j&                        }nt,        j.                  u r|t1        dd      v r7|j#                  t
        j&                        }dj                  |g|z        }n|t1        dd      v r,|j#                  t
        j&                        }|
|g| z  z  }
|j#                  t
        j2                        }d| d| d	}n'|j#                  t
        j4                        d| z   }|	r|	j)                  |       |	j)                  |       9 |
r |	s|	dgz  }	|	dddj                  |
      d	gz  }	dj                  |	      xs d}|	rt
        j&                  nt
        j                  }n| j                   t        j6                  u r| j                  \  }}}|t8        j:                  u r]t,        j.                  u rK|D cg c]#  }|j#                  t
        j&                        % c}\  }}| d| }t
        j&                  }n	|D cg c]#  }|j#                  t
        j2                        % }}||j!                         D cg c]*  \  }}|dz   |j#                  t
        j<                        z   , c}}z  }| ddj                  |       d	}t
        j                  }ni| j                   t        j>                  u rs| j                  d   }| j                  dd D cg c]#  }|j#                  t
        j2                        % }}| ddj                  |       d}t
        j                  }n| j                   t        j@                  u r[| j                  D cg c]#  }|j#                  t
        j&                        % }}dj                  |      }t
        j&                  }nc| j                   t        jB                  u r| j                  D cg c]#  }|j#                  t
        j2                        % c}\  }}}t,        j.                  u rd| d| d| d	}nYt,        jD                  u rd| d | d!| d	}n:t,        jF                  u rd"| d| d| d	}ntI        d#| j                    d$       t
        j                  }n| j                   t        jJ                  u r@d%| j                  j#                  t
        jL                        z   }t
        jL                  }n$| j                   t        jN                  u r?d&| j                  j#                  t
        jL                        z   }t
        jL                  }n| j                   t        jP                  u r| j                  \  }}}|tR        jT                  tR        jV                  fv rt
        jT                  nt
        jX                  }|j#                  |      }|j#                  |      }|j#                        }| d'| d'| }ntI        d(| j                          |jZ                  |jZ                  k  rd|z   d	z   S |S c c}w c c}w c c}}w c c}w c c}w c c}w ))z0Return a string representation of Expr.
        r   r   r2   _ r   c              3   `   K   | ]%  }|j                  t        j                          ' ywr   NrP   ra   rm   r   r   rK   s     r   r   z Expr.tostring.<locals>.<genexpr>  ,      1&/d --
(8(88-L&/   +.r   r   c              3   `   K   | ]%  }|j                  t        j                          ' ywr   r   r   s     r   r   z Expr.tostring.<locals>.<genexpr>+  r   r   []z -  + r    * -0r	   r   izpow(z ** 1/z / =Nz // ?:z if z else zmerge(ztostring for z and &* ztostring for op ).r   r   r    r!   r   ra   ri   re   r   r"   joinr%   r#   r$   r+   r   r   rP   	as_numberrh   appendr,   r   r   rangerm   rf   r'   rS   rZ   rn   r(   r)   r&   r   r   r   r-   rg   r.   r*   r0   rB   rC   rD   r   )rO   parent_precedencerK   
precedencertermstermcoeffr   factorstailbaseexpfactornameargskwargsargnumerdenomrs   rt   acondexpr1expr2ropleftrights     `                          r   rP   zExpr.tostring  s    77rzz277++,0IIaL1,<*..) DIIaL!(,		!(9 ()1%7?ACAWW

"		 1&*ii1 1Aa#A#JWW		!#JDIIAWW		!		!Ayy|q IIaL3&*#JWW 		 1&*ii1 1Aa#A#JWW E%diioo&78e19B"FEBA:==(=KDy|+"5z"'}t}}&.. 0= 0C  CLL$5[LL%T"%  9& %#A+0jooJWW

"GD#DIIOO$56	c!8!]]:+=+=4< + >F+eArl*!%z/A/A8@ "/ "B!&VHsN!;c1-!%z/A/A8@ "/ "BC4/ !%z/?/?8@ "/ "B#'xr#a!8!]]:+;+;4< + >BFseMFNN2&v&1 72 u$GCejj&6<< 'CA/6++JOOJWW !%D$w{{"x8::'= ,0 1+/C !$Z-?-?6> !- !@+/ 1u gS('//
 $()#'C Z%5%5I#'  )%+\\^5%3TQ S1::joo#>>%35 5fAdiio.a0'__
WW#99Q<D#yy}., LL!1!1HLE,  .&$))D/*!,A#JWW		!#yy*( LL!3!3hLG(  *D!A#++JWW

" ,099"6+4a #$**Z-=-=6> #- #@+4"6D% 8::%vQugQugQ/X__,wd4&ugQ7X---UG2eWBtfA6)#DGG9E(<> >#JWWdii(()9)9H(MMA#))JWW dii(()9)9H(MMA#))JWW%#yyCu+.588UXX2F+F*--)}} ==h=?DNN:NAE,,,1C&#aw'A%(8	&BCC""Z%5%55 7S= s 1)5.
*
"6s$   (g((g&/g (g =(g%4(g*c                     | S rp   r   r   s    r   __pos__zExpr.__pos__  s    r   c                     | dz  S )Nr   r   s    r   __neg__zExpr.__neg__  s    byr   c                    t        |      }t        |t              r| j                  |j                  u rN| j                  t        j
                  t        j                  fv rMt        | j                  d   |j                  d   z   t        | j                  d   |j                  d               S | j                  t        j                  u r0| j                  \  }}|j                  \  }}t        ||z   ||z         S | j                  t        j                  u rmt        | j                  t        | j                              }|j                  j                         D ]  \  }}t        |j                  ||        t!        |      S | j                  t        j                  u r:|j                  t        j
                  t        j                  fv r| t        |      z   S | j                  t        j
                  t        j                  fv r*|j                  t        j                  u rt        |       |z   S | j                  t        j                  u r9|j                  t        j
                  u r| t#        || j                  d         z   S | j                  t        j
                  u r9|j                  t        j                  u rt#        | |j                  d         |z   S t%        |       t%        |      z   S t&        S Nr   r   )kind)as_exprr   r   r   r   r    r!   r   r   maxr"   
as_complexr+   r   r   rv   	normalizeas_realas_termsr   )	rO   r   r1i1r2i2r   rs   rt   s	            r   __add__zExpr.__add__  s   eT"ww%(("77rzz27733$		!uzz!}4DIIaL%**Q-8: : 77bjj(!YYFB"ZZFB%b2grBw7777bhh&TWWd499o6A %

 0 0 21"1661a0 !3$Q<'ww"**$bjj"''5J)Jj///RZZ11ehh"**6L!$'%//BGG#BJJ(>ge$))A,???BJJ&588rww+>t%**Q-85@@D>HUO33r   c                 J    t        |t              rt        |      | z   S t        S rp   r   number_typesr   r   r   s     r   __radd__zExpr.__radd__  "    e\*U#d**r   c                     | | z   S rp   r   r   s     r   __sub__zExpr.__sub__  s    vr   c                 J    t        |t              rt        |      | z
  S t        S rp   r   r   s     r   __rsub__zExpr.__rsub__  r   r   c                    t        |      }t        |t              r| j                  |j                  u r| j                  t        j
                  t        j                  fv rMt        | j                  d   |j                  d   z  t        | j                  d   |j                  d               S | j                  t        j                  u r<| j                  \  }}|j                  \  }}t        ||z  ||z  z
  ||z  ||z  z         S | j                  t        j                  u rmt        | j                  t        | j                              }|j                  j                         D ]  \  }}t        |j                  ||        t!        |      S | j                  t        j"                  u rt        | j                  i       }| j                  j                         D ]D  \  }	}
|j                  j                         D ]"  \  }}t        |j                  |	|z  |
|z         $ F t!        |      S | j                  t        j                  u r:|j                  t        j
                  t        j                  fv r| t        |      z  S |j                  t        j                  u r:| j                  t        j
                  t        j                  fv rt        |       |z  S | j                  t        j                  u r9|j                  t        j
                  u r| t%        || j                  d         z  S | j                  t        j
                  u r9|j                  t        j                  u rt%        | |j                  d         |z  S | j                  t        j"                  u r| t'        |      z  S |j                  t        j"                  u rt'        |       |z  S t)        |       t)        |      z  S t*        S r   )r   r   r   r   r   r    r!   r   r   r   r"   r   r,   r   r   rv   r   r+   r   r   
as_factorsr   )rO   r   r   r   r   r   r   rs   rt   t1c1t2c2s                r   __mul__zExpr.__mul__  s   eT"ww%(("77rzz27733$TYYq\EJJqM%A%(1uzz!}%EG GWW

*!YYFB"ZZFB%b2gR&7b279JKK77bjj(TWWd499o6A %

 0 0 21"1661a0 !3$Q<'WW(TWWb)A"&))//"3B&+jj&6&6&8FB&qvvrBwR@ '9 #4 %Q<'ww"**$bjj"''5J)Jj///RZZ'DGG

BGG7L,L!$'%//BGG#BJJ(>ge$))A,???BJJ&588rww+>t%**Q-85@@ww"(("huo--RXX%~--d#j&777r   c                 J    t        |t              rt        |      | z  S t        S rp   r   r   s     r   __rmul__zExpr.__rmul__  r   r   c                 V   t        |      }t        |t              r|j                  t        j
                  u r|j                  d   }|dk(  rt        d      S |dk(  r| S |dkD  r|| j                  t        j                  u rUt        | j                  i       }| j                  j                         D ]  \  }}||z  |j                  |<    t        |      S | | |dz
  z  z  S |dk7  r	| | z  dz  S t        t        j                  | |i      S t        t        j                  | |      S t        S )Nr   r   r   )r   r   r   r   r   r    r   r   r,   r   r   as_applyrS   r[   r   )rO   r   exponentr   rs   rt   s         r   __pow__zExpr.__pow__  s   eT"xx2::% ::a=q=$Q<'q=Ka<ww"**, "-$(IIOO$5DAq()HAFF1I %6(|+4HqL#9::^ hY/B66BJJx(899GKKu55r   c                     t        |      }t        |t              r$t        t	        t
        j                  | |            S t        S rp   )r   r   r   r   r  rS   rZ   r   r   s     r   __truediv__zExpr.__truediv__  s5    eT" Xgkk4?@@r   c                 N    t        |      }t        |t              r|| z  S t        S rp   r   r   r   r   r   s     r   __rtruediv__zExpr.__rtruediv__"  s%    eT"4<r   c                     t        |      }t        |t              r%t        t        t        j
                  | |f            S t        S rp   )r   r   r   r   r   r)   r   r   s     r   __floordiv__zExpr.__floordiv__(  s7    eT" T"))dE];<<r   c                 N    t        |      }t        |t              r|| z  S t        S rp   r  r   s     r   __rfloordiv__zExpr.__rfloordiv__0  s%    eT"D= r   c           	      x    t        | gt        t        |      i t        d |j	                         D              S )Nc              3   <   K   | ]  \  }}|t        |      f  y wrp   r   r   rs   rt   s      r   r   z Expr.__call__.<locals>.<genexpr>=  s     J>41a71:>r   )r  mapr   r   r   )rO   r   r   s      r   __call__zExpr.__call__6  s>      Ls7D1 LJ6<<>JJL 	Lr   c                     t        |      }t        |t              s|f}t        |      dkD  rt	        d| d       t        t        j                  | f|z         S )Nr   z/C-index should be a single expression but got ``)r   r   r   r   r~   r   r   r(   )rO   indexs     r   __getitem__zExpr.__getitem__?  sR     %'FEu:>CE7!LMBKK$511r   c           	      
   | j                   t        j                  u rij                  |       }|| S t	        j
                  d| j                        }|r0|j                         \  }}|dv rt        |      S |dk(  s	J ||f       |S | j                   t        j                  t        j                  t        j                  fv r| S | j                   t        j                  t        j                  fv r2t        | j                   t        fd| j                  D                    S | j                   t        j                   u r;t#        t        | j                   t        fd| j                  D                          S | j                   t        j$                  u rld}| j                  j'                         D ]3  \  }}||j)                        |z  }||j)                        |z  z  }5 |t+        d       t-        d      S |S | j                   t        j.                  u rld}| j                  j'                         D ]3  \  }	}
||	j)                        |
z  }||	j)                        |
z  z  }5 |t+        d	       t-        d
      S |S | j                   t        j0                  u r| j                  \  }}}t3        |t              r|j)                        }t        fd|D              }t5        fd|j'                         D              }t#        t        | j                   |||f            S | j                   t        j6                  u rt| j                  d   }t3        |t              r|j)                        }t        fd| j                  d
d D              }t#        t        | j                   |f|z               S | j                   t        j8                  u r=t        fd| j                  D              }t#        t        | j                   |            S | j                   t        j:                  t        j<                  fv r8t#        t        | j                   | j                  j)                                    S | j                   t        j>                  u rT| j                  \  }}}|j)                        }|j)                        }t#        t        | j                   |||f            S tA        d| j                    d|       )zRecursively substitute symbols with values in symbols map.

        Symbols map is a dictionary of symbol-expression pairs.
        Nz$\A(@__f2py_PARENTHESIS_(\w+)_\d+@)\ZROUNDDIVSQUAREROUNDc              3   @   K   | ]  }|j                          y wrp   
substituter   r   symbols_maps     r   r   z"Expr.substitute.<locals>.<genexpr>]  s"      '>3<4 (,{'C3<   c              3   @   K   | ]  }|j                          y wrp   r)  r+  s     r   r   z"Expr.substitute.<locals>.<genexpr>`  s#      1H=FT 261M=Fr-  z?substitute: empty TERMS expression interpreted as int-literal 0r   zAsubstitute: empty FACTORS expression interpreted as int-literal 1r   c              3   @   K   | ]  }|j                          y wrp   r)  r   r   r,  s     r   r   z"Expr.substitute.<locals>.<genexpr>~  s     ADqk2Dr-  c              3   J   K   | ]  \  }}||j                        f  y wrp   r)  )r   rs   rt   r,  s      r   r   z"Expr.substitute.<locals>.<genexpr>  s+      6&4da all;78&4    #c              3   @   K   | ]  }|j                          y wrp   r)  r0  s     r   r   z"Expr.substitute.<locals>.<genexpr>  s     JMqk2Mr-  c              3   @   K   | ]  }|j                          y wrp   r)  r0  s     r   r   z"Expr.substitute.<locals>.<genexpr>  s     J	1Q\\+6	r-  zsubstitute method for z: )!r   r   r%   rq   rematchr   groupsas_arrayr    r!   r#   r$   r"   r   r   r)   r   r+   r   r*  r~   r   r,   r'   r   r   r(   r&   r-   r.   r*   r   )rO   r,  r   mr   parenr   r   r   r   r  targetr   r   funcoperandsr   r   r   s    `                 r   r*  zExpr.substituteI  s   
 77biiOOD)E}@$))LA xxzu22#E?*'7%7'L77rzz277BII66K77rxx,, '>3799'> "> ? ?77biiT$''5 1H=AYY1H ,H I J J77bhhA#yy0e94u<A5==A	  1
 y ' ( |#H77bjj A"&))//"3h94@A5AAA	 #4
 y * + |#H77bhh#'99 FD&&$'**;7ADAAD 6&,lln6 6FT$''FD&+ABCC77bkk!99Q<D$%{3JDIIabMJJDT$''D7T>:;;77bjj J		JJHT$''845577rvvrxx((T$''499+?+?+LMNN77bmm##yyCu??;/D$$[1ET$''Cu+=>??!$:477)2dX"NOOr   c           
          | gi }||S | j                   t        j                  t        j                  t        j                  t        j
                  fv r| S | j                   t        j                  t        j                  t        j                  t        j                  fv r=t        t        | j                   t        fd| j                  D                          S | j                   t        j                  t        j                  fv ri }| j                  j!                         D ]T  \  }} |j"                  gi }t%        |t              r |j"                  gi n|}||v r||   |z   }|||<   V t        t        | j                   |            S | j                   t        j&                  u r| j                  d   }t%        |t              r |j"                  gi n|}	t        fd| j                  d   D              }
t)        fd| j                  d   j!                         D              }t        t        | j                   |	|
|f            S | j                   t        j*                  u r}| j                  d   }t%        |t              r |j"                  gi n|}t        fd| j                  dd D              }t        t        | j                   |f|z               S | j                   t        j,                  t        j.                  fv r=t        t        | j                    | j                  j"                  gi             S | j                   t        j0                  u r^| j                  \  }}} |j"                  gi } |j"                  gi }t        t        | j                   |||f            S t3        d	| j                          )
aB  Traverse 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.
        Nc              3   J   K   | ]  } |j                   gi   y wrp   traverse)r   r   r   r   visits     r   r   z Expr.traverse.<locals>.<genexpr>  s.      1'%D e5d5f5%r2  r   c              3   J   K   | ]  } |j                   gi   y wrp   r@  )r   operandr   r   rB  s     r   r   z Expr.traverse.<locals>.<genexpr>  s0      :,8 .W--eEdEfE,8r2  r   c              3   T   K   | ]  \  }}| |j                   gi f ! y wrp   r@  )r   rs   rt   r   r   rB  s      r   r   z Expr.traverse.<locals>.<genexpr>  s8      @*>$!Q  !*!**U"DT"DV"DE*>s   %(r	   c              3   J   K   | ]  } |j                   gi   y wrp   r@  )r   r!  r   r   rB  s     r   r   z Expr.traverse.<locals>.<genexpr>  s.      8)6 +ENN5B4B6B)6r2  ztraverse method for )r   r   r    r!   r#   r%   r"   r$   r)   r&   r   r   r   r   r+   r,   r   rA  r   r'   r   r(   r-   r.   r*   r   )rO   rB  r   r   resultr   rs   rt   objr<  r=  
kwoperandsindicesr   r   r   s    ```            r   rA  zExpr.traverse  sl    t-d-f-M77rzz277BIIryyAAKWWRXXryy"**EET$''5 1' II1' ,' ( ) ) WW2::..D		)1AJJu6t6v6"1d+  QZZ77712 9Q!AQ * T$''4011WW ))A,C!#t, !CLL88825  :,0IIaL: :H @*.))A,*<*<*>@ @JT$''D(J+GHIIWW#))A,C d+  3<<77714  8)-128 8GT$''C6G+;<==WW**T$''"4$))"4"4U"LT"LV"LN O OWW%#yyCu 4==888D"ENN5:4:6:ET$''Cu+=>??!$8	"BCCr   c                 T    g }|ffd	}| j                  |       t        |      dk7  S )z&Check if self contains other.
        c                 >    |r| S | k(  r|j                  d       | S y )Nr   )r   )exprfoundr   s     r   rB  zExpr.contains.<locals>.visit  s'    Q r   r   )rA  r   )rO   r   rN  rB  s    `  r   containszExpr.contains  s.     # 	 	e5zQr   c                 F    t               }|fd}| j                  |       |S )z3Return a set of symbols contained in self.
        c                 `    | j                   t        j                  u r|j                  |        y y rp   )r   r   r%   add)rM  rN  s     r   rB  zExpr.symbols.<locals>.visit  s"    ww"))#		$ $r   setrA  rO   rN  rB  s      r   symbolszExpr.symbols  s&     # 	  	er   c                 L    t               }|ffd	| j                         |S )zFReturn a set of expressions used as atoms in polynomial self.
        c                    | j                   t        j                  u r$| j                  D ]  }|j	                          | S | j                   t        j
                  t        j                  fv ry | j                   t        j                  u r`t        | j                  d   t              rC| j                  d   t        j                  u r#| j                  d   d   j	                         | S y | j                   t        j                  t        j                  fv r| S |j                  |        | j                   t        j                  t        j                  fv r| S y Nr   r   )r   r   r,   r   rA  r+   r"   r'   r   rS   r[   r    r!   rR  r(   )rM  rN  brB  s      r   rB  z$Expr.polynomial_atoms.<locals>.visit  s    ww"**$AJJu% #ww288RZZ00ww"(("z$))A,'H99Q<7;;.IIaLO,,U3Kww2::rww//IIdOww2;;11 2r   rS  rU  s     @r   polynomial_atomszExpr.polynomial_atoms  s'     # 	( 	er   c                     | j                  |t        d      i      }| |z
  }|j                  |t        d      i      }t        ||z  |z
        \  }}|t        d      k7  rt        d| d| d| d| d|  
      ||fS )zReturn a, b such that a * symbol + b == self.

        If self is not linear with respect to symbol, raise RuntimeError.
        r   r   znot a z-linear equation: r   r   z == )r*  r   as_numer_denomRuntimeError)rO   symbolrZ  axr   zeror   s          r   linear_solvezExpr.linear_solve  s    
 OOVYq\23AXMM69Q<01 Vb1a9Q<x 0##$#SA3d4& B C C!tr   N)*r
   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   ra   rn   r   rP   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r"  r*  rA  rO  rV  r[  rb  r   r   r   r   r      s    
 "** 0 0
@D-
% B76B *4"**Pd8

'R
.L2IPV6Dp :r   c           	         t        | t              s| S | j                  t        j                  u ri }| j
                  j                         D ]  \  }}|dk(  r|j                  t        j                  u r|dk7  r||z  }d}|j                  t        j                  u r3|j
                  j                         D ]  \  }}t        ||||z          t        |||        t        |      dk(  rt        d      S t        |      dk(  r|j                         \  \  }}|dk(  r|S t        t        j                  |      S | j                  t        j                  u rEd}i }| j
                  j                         D ]8  \  }}|dk(  r|j                  t        j                  u r"t        |t              r|dkD  r|||dz
  z  z  }d}|j                  t        j                  t        j                  fv rA|dk(  r||j
                  d   z  }|dkD  r||j
                  d   |z  z  }t        |||       |j                  t        j                  u rX|dkD  rDt        |t              r4|j
                  j                         D ]  \  }	}
t        ||	|
|z          t        |||       ,t        |||       ; t        |      dk(  s|dk(  rt        |t              sJ t        |      S t        |      dk(  rZ|j                         \  \  }}|dk(  r|}nt        t        j                  |      }|dk(  r|S t        t        j                  ||i      S |dk(  rt        t        j                  |      S t        t        j                  t        t        j                  |      |i      S | j                  t        j                   u r| j
                  d   t"        j$                  u r| j
                  d   \  }}t'        |      \  }}t'        |      \  }}t        |t              r't        |t              rt)        ||      }||z  ||z  }}n||z  d}}|j                  t        j                   u rg|j
                  d   t"        j$                  u rH|j
                  d   d   |z  }|j
                  d   d   |z  |z  }t+        t"        j$                  ||      S |j                  t        j                   u rg|j
                  d   t"        j$                  u rH|j
                  d   d   |z  |z  }|j
                  d   d   |z  }t+        t"        j$                  ||      S t-        t/        |      j
                        }t/        |      j
                  j                         D ]  \  }}t        |||         i i }}|j                         D ]  \  }}|dkD  r|||<   | ||<    t1        t        t        j                  |            |z  }t1        t        t        j                  |            |z  }|j                  t        j                  t        j                  fv r|j
                  d   dk(  r|S t+        t"        j$                  ||      S | j                  t        j2                  u r:| j
                  d   g}| j
                  dd D ]  }|d   }|j                  t        j4                  u r|j                  t        j4                  u r|j
                  d   d   dv r~|j
                  d   d   |j
                  d   d   k(  rYt7        |j
                  d   dd |j
                  d   dd z   t9        |j
                  d   |j
                  d               }||d<   |j;                  |        t        |      dk(  r|d   S t        t        j2                  t=        |            S | j                  t        j>                  u rjtA        t0        | j
                        \  }}}|j                  t        j                  u r|j
                  d   r|S |S t        t        j>                  |||f      S | S )z7Normalize Expr and apply basic evaluation methods.
    r   r   Nr   z"')!r   r   r   r   r+   r   r   r"   rv   r   r   r,   integer_typesr    r!   r   r'   rS   rZ   as_term_coeffr   r  r   r  r   r)   r#   	as_stringr   r   r   r&   r  )rH  rr   tru   r  r  r   rZ  eb1e1dividenddivisorr  r  gr   r   lstrJ   lastnew_lastr   r   r   s                            r   r   r     s    c4 

vvHHNN$DAqAvttrzz!a1fEttrxxffllnFBq"b1f- - 1a# % q6Q;Q<Vq[ggiGFQAvBHHa  
vvHHNN$DAqAvttrxxJq-$@QUq1u&tt

BGG,,6QVVAY&EUQVVAY!^+Eq!Q'#q5Z=9"#&&,,.B"1b"q&1 #1 q!Q'1a#- %. q6Q;%1*e\222U##Vq[ggiGFQAvQ'z1e*--aZ

A&&4

A#6">??
vvchhqkW[[8HHQK'x(Bw'Bb-(ZM-JBAUBEBUAB55BHHw{{!:GGAJqMB&EGGAJqMB&+EGKK6655BHHw{{!:GGAJqMB&+EGGAJqMB&EGKK66B$$%rN''--/DAqq!aR  02uGGIDAq1ua2a	 
 $rzz512R7$rzz512R788

BGG,,A!1CLUE22
vvxx{m!"Ar7DGGryy(		)		!Q50q	!		!R(88$TYYq\#2%612%F%(1qvvay%AC"B

1  s8q=q6MBIIuSz**
vv CHH5eU77bjj  IIaL53e3BJJue 455Jr   c                 6   t        | t              r t        | j                  | j                        S t        | t
              rt        |       S t        | t              rt        t        |             S t        | t              rt        t        t        |             S | S )z.Convert non-Expr objects to Expr objects.
    )r   complexr   realimagr   r   r   rg  reprr   r  r   rH  s    r   r   r     ss     #w#((CHH--#|$~#s c###uS#&''Jr   c                 6    t        t        j                  |       S )zJReturn object as SYMBOL expression (variable or unparsed expression).
    )r   r   r%   rw  s    r   	as_symbolry    s     		3r   c                 L   t        | t              rt        t        j                  | |f      S t        | t
              rt        t        j                  | |f      S t        | t              r.| j                  t        j                  t        j                  fv r| S t        d|  d      )z/Return object as INTEGER or REAL constant.
    cannot convert z to INTEGER or REAL constant)	r   r   r   r   r    r   r!   r   r]   rH  r   s     r   r   r     s     #sBJJd,,#uBGGc4[))#t66bjj"''**J
OC5(DE
FFr   c                     t        | t              rt        t        j                  | |f      S t        | t              r| j
                  t        j                  u r| S t        d|  d      )z'Return object as INTEGER constant.
    r{  z to INTEGER constant)r   r   r   r   r    r   r]   r|  s     r   
as_integerr~    sW     #sBJJd,,#t66RZZJ
OC5(<=
>>r   c                    t        | t              r%t        t        j                  t        |       |f      S t        | t
              rt        t        j                  | |f      S t        | t              rl| j                  t        j                  u r| S | j                  t        j                  u r2t        t        j                  t        | j                  d         |f      S t        d|  d      )z$Return object as REAL constant.
    r   r{  z to REAL constant)
r   r   r   r   r!   r   r   r    r   r]   r|  s     r   r   r     s     #sBGGeCj$/00#uBGGc4[))#t66RWWJVVrzz!%"4d!;<<
OC5(9:
;;r   c                 :    t        t        j                  | |f      S )zBReturn object as STRING expression (string literal constant).
    )r   r   r#   r|  s     r   rg  rg    s     		C;''r   c                 \    t        | t              r| f} t        t        j                  |       S )z8Return object as ARRAY expression (array constant).
    )r   r   r   r$   rw  s    r   r8  r8    s&     #td#r   c                 ^    t        t        j                  t        |       t        |      f      S )zDReturn object as COMPLEX expression (complex literal constant).
    )r   r   r"   r   )rt  ru  s     r   r   r     s"     

WT]GDM:;;r   c           
          t        t        j                  | t        t	        t
        |            t        d |j                         D              f      S )zIReturn object as APPLY expression (function call, constructor, etc.)
    c              3   <   K   | ]  \  }}|t        |      f  y wrp   r  r  s      r   r   zas_apply.<locals>.<genexpr>  s     A.$!Qq'!*o.r   )r   r   r'   r   r  r   r   r   )r<  r   r   s      r   r  r    sD     uS$/0A&,,.AACD Dr   c                 <    t        t        j                  | ||f      S )z<Return object as TERNARY expression (cond?expr1:expr2).
    )r   r   r&   )r   r   r   s      r   
as_ternaryr    s     

T5%011r   c                 6    t        t        j                  |       S )z-Return object as referencing expression.
    )r   r   r-   rM  s    r   as_refr    s     r   c                 6    t        t        j                  |       S )z/Return object as dereferencing expression.
    )r   r   r.   r  s    r   as_derefr    s     $r   c                 X    t        t        j                  t        j                  | |f      S rp   )r   r   r*   r0   rB   r   r   s     r   as_eqr        $677r   c                 X    t        t        j                  t        j                  | |f      S rp   )r   r   r*   r0   rC   r  s     r   as_ner    r  r   c                 X    t        t        j                  t        j                  | |f      S rp   )r   r   r*   r0   rD   r  s     r   as_ltr    r  r   c                 X    t        t        j                  t        j                  | |f      S rp   )r   r   r*   r0   rE   r  s     r   as_ler    r  r   c                 X    t        t        j                  t        j                  | |f      S rp   )r   r   r*   r0   rF   r  s     r   as_gtr    r  r   c                 X    t        t        j                  t        j                  | |f      S rp   )r   r   r*   r0   rG   r  s     r   as_ger    r  r   c                 L   t        | t              rt        |       } | j                  t        j
                  u r| S | j                  t        j                  u r@t        t        j
                  t        d| j                  d         | j                  d   i      S | j                  t        j                  u r@t        t        j
                  t        d| j                  d         | j                  d   i      S t        t        j
                  | di      S t        dt        |        d      )z+Return expression as TERMS expression.
    r   r   r{   to terms Expr)r   r   r   r   r   r+   r    r~  r   r!   r   r]   r   rw  s    r   r   r   #  s     #tn66RXXJ66RZZ:a!#=sxx{"KLL66RWW71chhqk#:CHHQK"HIIBHHsAh''
ODI;n=
>>r   c                 8   t        | t              rrt        |       } | j                  t        j
                  u r| S | j                  t        j                  u rt        | j                        dk(  rq| j                  j                         \  \  }}|dk(  rt        t        j
                  |di      S t        t        j
                  |dt        j                  |      di      S | j                  t        j                  u rl| j                  d   t        j                  u rM| j                  d   s>t        t        j
                  | j                  d   d   d| j                  d   d   di      S t        t        j
                  | di      S t        dt        |        d      )z-Return expression as FACTORS expression.
    r   r   r	   r   r{  r  )r   r   r   r   r   r,   r+   r   r   r   numberr'   rS   rZ   r]   r   )rH  r   r   s      r   r  r  2  s/    #tn66RZZJ66RXX388}!!$!1uA:

T1I66BJJq$++e2Da(HIIFFbhh!+XXa[

SXXa[^QA$KLLBJJa))
ODI;n=
>>r   c                 <   t        | t              rtt        |       } | j                  t        j
                  u r(t        d| j                  d         | j                  d   fS | j                  t        j                  u r(t        d| j                  d         | j                  d   fS | j                  t        j                  u r;t        | j                        dk(  r#| j                  j                         \  \  }}||fS | j                  t        j                  u rj| j                  d   t        j                  u rKt!        | j                  d   d         \  }}t#        t        j                  || j                  d   d         |fS | dfS t%        dt'        |        d      )z0Return expression as term-coefficient pair.
    r   r   r{  z to term and coeff)r   r   r   r   r   r    r~  r   r!   r   r+   r   r   r'   rS   rZ   rf  r  r]   r   )rH  r   r   rh  ru   s        r   rf  rf  G  s>    #tn66RZZa!-sxx{::66RWW1chhqk*CHHQK7766RXX388}!!$!1uU{"66RXX#((1+"< !Q0DAqGKKCHHQKN;Q>>Av
ODI;.@A
BBr   c                    t        | t              rt        |       } | j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  fv r| t        d      fS | j                  t        j                  u rq| j                  d   t        j                  u rE| j                  d   s6t!        t"        | j                  d         \  }}|d   |d   z  |d   |d   z  fS | t        d      fS | j                  t        j$                  u rg g }}| j                  j'                         D ]:  \  }}t#        |      \  }}||z  }|j)                  |       |j)                  |       < t        d      t        d      }}t+        t-        |            D ];  }	||	   }t+        t-        |            D ]  }
|	|
k7  s	|||
   z  } ||z  }|||	   z  }= |j                  t        j
                  t        j                  fv r|j                  d   dk  r| | }}||fS | j                  t        j.                  u rxt        d      t        d      }}| j                  j'                         D ]A  \  }}t#        |      \  }}|dkD  r|||z  z  }|||z  z  }*|dk  s0||| z  z  }||| z  z  }C ||fS t1        dt3        |        d      )z+Return expression as numer-denom pair.
    r   r   r	   r{  z to numer and denom)r   r   r   r   r   r    r!   r"   r%   r(   r&   r   r'   r   rS   rZ   r  r]  r+   r   r   r   r   r,   r]   r   )rH  numersdenomsr   r   nrr   r   r   ijrZ  ri  bnumerbdenoms                  r   r]  r]  \  s    #tn66bjj"''2::ryykk2::/ /	!$$VVrxxxx{gkk)#((1+!$^SXXa[!Aay6!9,fQi&).CCC	!$$VVrxxFF"xx~~/e%d+1Ia a 	  0
 %Q<15E3v;'1Is6{+AAvVAY , 
" ( xxBJJ00UZZ]Q5F %vvu%<VVrzz!$Q<15E(1!/!2q5Vq[(EVq[(EUV^+EV^+E ) %<
ODI;.AB
CCr   c               #   $   K   d} 	 | dz  } |  
wrY  r   )counters    r   _counterr    s!     G
1 s   c                     i fd}t        j                  dj                  ddd      ||       }d|vsJ d|vsJ |fS )	zgReplace quoted substrings of input string.

    Return a new string and a mapping of replacements.
    c                     | j                         d d \  }}|r|d d }ddd|d      }| d| dt        j                          d	}||<   |S )
Nr	   r   SINGLEDOUBLE)'"r   z@__f2py_QUOTES_r   @)r7  COUNTER__next__)r9  r   r   prs   rr   s        r   replzeliminate_quotes.<locals>.repl  si    hhj!ne9D*584fOA3a(8(8(:';1=!r   z+({kind}_|)({single_quoted}|{double_quoted})z
\w[\w\d_]*z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))r   single_quoteddouble_quotedr  r  )r5  subformat)rJ   r  new_srr   s      @r   eliminate_quotesr    sj    
 	A FFAHH,, I . 	a	E ee!8Or   c                     |j                         D ]5  \  }}|d|j                  d       }|r|dz  }| j                  |||z         } 7 | S )z!Inverse of eliminate_quotes.
    Nr  r   )r   findreplace)rJ   rr   rs   rt   r   s        r   insert_quotesr    sR     	1!&&+CKDIIa"	 
 Hr   c                    d\  }}t        |       }dD ](  \  }}| j                  |      }|dk(  r||k  s#|}||}}* || i fS |}| j                  ||      }| j                  ||dz   |      | j                  ||dz   |      k7  r\| j                  ||dz         }|dk(  rt        d||z    d|       | j                  ||dz   |      | j                  ||dz   |      k7  r\dd	d
dd|   }d| dt        j                          d}	| |t        |      z   | }
t        | |t        |      z   d       \  }}|
||	<   | d| |	z   |z   |fS )zzReplace substrings of input that are enclosed in parenthesis.

    Return a new string and a mapping of replacements.
    )NN))(//)z()z{}z[]r   Nr   zMismatch of z parenthesis in r'  r&  CURLYr%  )r   r   {r  @__f2py_PARENTHESIS_r   r  )r   r  count
ValueErrorr  r  replace_parenthesis)rJ   r   r   mn_ileft_right_r  r  r  rs   rt   r   rr   s                r   r  r    s    KD%q6D v FF5M7t8D%D  |"uA	uaA
''$Aq
!QWWUAE1%=
=FF5!a% 7|DJ<7GuMNN ''$Aq
!QWWUAE1%=
=
 H7*EdKA
qc7#3#3#5"6a8A	!CI+aAq3u:/0DAqAaDRa519q=!r   c                 Z    | j                  d      sJ |        | j                  d      d   S )Nr  r   r2   )
startswithsplit)rJ   s    r   _get_parenthesis_kindr    s,    <<./22/773<?r   c                     |j                         D ]L  \  }}t        |      }t        dddd      |   }t        dddd	      |   }| j                  |||z   |z         } N | S )
z$Inverse of replace_parenthesis.
    r   r   r  r  )r'  r&  r  r%  r   r   }r  )r   r  r   r  )rJ   rr   rs   rt   r  r   r   s          r   unreplace_parenthesisr    sl     	1!!$#ctDQG3s#EaHIIaE)*	 
 Hr   c                     t        |      j                  |       }t        |t              r|S t	        d|  d| d      )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.
    r   zfailed to parse `z` to Expr instance: got `r   )_FromStringWorkerr   r   r   r  )rJ   rK   r   s      r   rL   rL     sD     	8,2215A!T
(+DQCqI
JJr   c                       e Zd Zd Zd Zd Zy)_Pairc                      || _         || _        y rp   r  )rO   r   r   s      r   r   z_Pair.__init__  s    	
r   c                     | j                   | j                  }}t        |t              r|j	                  |      }t        |t              r|j	                  |      }t        ||      S rp   )r   r   r   r   r*  r  )rO   r,  r   r   s       r   r*  z_Pair.substitute
  sR    iiedD!??;/DeT"$$[1ET5!!r   c                 f    t        |       j                   d| j                   d| j                   dS r   )r   r
   r   r   r   s    r   r   z_Pair.__repr__  s.    t*%%&a		{"TZZLBBr   N)r
   r   r   r   r*  r   r   r   r   r  r    s    "Cr   r  c                   >    e Zd Zej                  fdZd Zd ZddZy)r  c                 .    d | _         d | _        || _        y rp   )original
quotes_maprK   rN   s     r   r   z_FromStringWorker.__init__  s     r   c                 .    t        || j                        S rp   )r  r  )rO   rJ   s     r   finalize_stringz!_FromStringWorker.finalize_string  s    Q00r   c                 X    || _         t        |      \  }| _        | j                  |      S rp   )r  r  r  process)rO   inpunquoteds      r   r   z_FromStringWorker.parse   s)    $4S$9!$/||H%%r   c           	          t        |t        t        f      r t        |       fd|D              S t        |t              sJ t        |      |f       t        |      \  }|j                         }fdd|v rq |j                  d            }dk(  rt         j                  |            S dk(  r%t        |      dk(  rt         j                  |       S t        d d|       t        j                  d	|      }|rfdk(  sJ         |j                               \  }}} j                  |      } j                  |      } j                  |      }t        |||      S  j                   t"        j$                  u r&t        j                  d
|t        j&                        }nt        j                  d|      }|r|j                         \  }	}
} j                   t"        j$                  u rd|
z   dz   }
 j                   |	|f            \  }	}t(        j+                  |
 j                         }
t-        t.        j0                  |
|	|f      S t        j                  d|      }|r6|j                         \  }} |      }t3        | j                  |            S t        j                  d|      }t        |      dkD  r~ j                   |d   xs d            }t5        |ddd   |ddd         D ]C  \  }} j                   |            }|j                         }|dk(  r||z  }8|dk(  sJ ||z  }E |S  j                   t"        j$                  u rMd|v rI |j                  d            }t-        t.        j6                  t         j                  |                  S t        j                  d j                   t"        j8                  u r|n|j;                  dd            }t        |      dkD  r |      } j                   t"        j8                  ur|D cg c]  }|j;                  dd       }} j                  |d         }t5        |ddd   |ddd         D ]=  \  }} j                  |      }|j                         }|dk(  r||z  }2|dk(  sJ ||z  }? |S |j=                  d      rMt.        j>                  t.        j@                  d|d      } j                   |dd             }t-        ||      S  j                   t"        j8                  urcd|v r_t        tC         |j                  d                        } j                  |d         }|dd D ]  } j                  |      }||z  } |S t        j                  djE                  dd       |      }|rJ|j                         \  }}}|r|jG                         rtI        |      }tK        tI        |      |xs d!      S t        j                  d"jE                  d#d$d%      |      }|r|j                         \  }}}}|r|jG                         rtI        |      }|jM                         }d&|v r)tO        tQ        |j;                  d&d'            |xs d(      S tO        tQ        |      |xs d!      S | jR                  v r1|d|jU                  d)       }tW         jR                  |   |xs d      S |v rftY        |      } j                   |         |d*k(  rdnd      }|d*k(  rt        |t,              r|S |d+v rt        |t,              r|f}t[        |      S t        j                  d,|      }|r|j                         \  }}} j                   |            } j                   |      dd- d      }t        |t              s|f}|d*k(  r3t]        d. |D              }t        d/ |D              }t_        |g|i |S |d0k(  sJ ||   S t        j                  d1|      }|rta        |      S  jc                   |            }te        d2|d3 jf                   d4       ta        |      S c c}w )5a  Parse 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.
        c              3   B   K   | ]  }j                  |        y wrp   )r  )r   s_contextrO   s     r   r   z,_FromStringWorker.process.<locals>.<genexpr>0  s     Aq4<<G4qs   c                 ~    t        | t        t        f      r t        |       t	        |             S t        |       S rp   )r   listr   r   r  r  )r   raw_symbols_maprestores    r   r  z*_FromStringWorker.process.<locals>.restore8  s5    !dE]+tAws7A//(O<<r   ,r   rM  r	   z&parsing comma-separated list (context=z): z\A([^?]+)[?]([^:]+)[:](.+)\Zz+\A(.+)\s*[.](eq|ne|lt|le|gt|ge)[.]\s*(.+)\Zz7\A(.+)\s*([=][=]|[!][=]|[<][=]|[<]|[>][=]|[>])\s*(.+)\Z.r   z\A(\w[\w\d_]*)\s*[=](.*)\Zz((?<!\d[edED])[+-])r   r   r   N+r   z//z(?<=[@\w\d_])\s*([*]|/)z**z@__f2py_DOUBLE_STAR@r   r   )r   r   z\A({digit_string})({kind}|)\Zz\d+z_(\d+|\w[\w\d_]*))digit_stringr   r2   z7\A({significant}({exponent}|)|\d+{exponent})({kind}|)\Zz[.]\d+|\d+[.]\d*z[edED][+-]?\d+)significantr  r   rr   ri     r  r'  r$  z4\A(.+)\s*(@__f2py_PARENTHESIS_(ROUND|SQUARE)_\d+@)\Zr   c              3   l   K   | ],  }t        |t              r|j                  |j                  f . y wrp   )r   r  r   r   r   r   s     r   r   z,_FromStringWorker.process.<locals>.<genexpr>  s-      7A!+Au!5  !vvqww/s   24c              3   B   K   | ]  }t        |t              r|  y wrp   )r   r  r  s     r   r   z,_FromStringWorker.process.<locals>.<genexpr>  s     I1Jq%4HQs   r&  z\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r   )4r   r  r   r   r   r  stripr  r  r   r   r   r5  r6  r7  r  rK   r   r   Ir0   rL   r   r   r*   r  zipr)   r   r  r  r.   r-   reversedr  isdigitr   r~  rH   r   r   r  r  rg  r  r8  r   r  ry  r  r~   r  )rO   rJ   r  r   r=  r9  operr   r   r   r   r   keynamer   rG  r   rD  r   r   r:  r   r;  r   r   r  r  s   ` `                     @@r   r  z_FromStringWorker.process%  s&    a$'47AqAAA!S!/DGQ</! 13?GGI	= !8qwws|,H& T\\(344& x=A%%t||H'=>>%8	QCHJ J HH4a8f$-g-$!(!4D%<<%DLL'ELL'EdE511 ==H,,,>244IA JAOA xxzD#u}} 0 00Ci#o,,we}'=>KD%""3"?CT5'9:: HH2A6XXZNGUENE$,,u"566 882A6x=1\\'(1+*<"=>F"8ADqD>8ADqD>BG,,ww'78XXZ9g%F9$9g%F  C M ==H,,,qwwt}-H		dll8457 7 886"&--8::"=Q"#))D2H"IL x=1x(H}}HJJ.+35+3 $OO,BDI+3  5 \\(1+.F"8ADqD>8ADqD>BG,,w/XXZ9g%F9$9g%F  C M <<
#xxbff-ad3Bll71QR5>2GG$$ ==

*tqyHWQWWT]%;<=H\\(1+.F#AB<,,w/ F* ( M HH5<<% = '()+ XXZNE1d4yc%j$)!44 HHOf%8"32  4 67	8
  !
E1a4yKKMEe|uU]]3%<=tyqII5<33 \affSk?DT__Q/;; )!,ELL);!<+0G+;IEeT* L..eT*"HE& HHL"#((*FD%\\'&/2F<<a 3V<DdE*u 7 7 7III8888 (((d|# HH&*Q<   ,#A5(=dmm_AN	P|Q5s   .a8Nr  )	r
   r   r   r   r   r   r  r   r  r   r   r   r  r    s     (

 !
1&
Hr   r  )r2   )r   )r   ):r   __all__r5  r{   enumr   mathr   r   r   r0   rS   	Exceptionr]   ra   r   re  r   r   rv   UserWarningrx   r~   r   r   r   ry  r   r~  r   rg  r8  r   r  r  r  r  r  r  r  r  r  r  r   r  rf  r]  r  r  r  r  r  r  r  r   rL   r  r  r   r   r   <module>r      sg  4 ( 
   
t 
 *5D 5<
d 
	i 	 & U|
	+ 	6w	 w	tFR  
G?<(<D2 888888??*C**DZ *:(V
 $:: 	KC C&W Wr   