
    Kh                        S r S/rSSKrSSKrSSKJr  SSKJr   " S S\5      r " S S	\5      r	 " S
 S\5      r
 " S S\5      r " S S\5      r " S S\5      r\4r\\4rS r " S S\5      rS r " S S5      rS rS rS rS9S jrS9S jrS9S jrS:S jrS rS;S jr S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/\/" 5       r0S/ r1S0 r2S1 r3S2 r4S3 r5\Rl                  4S4 jr7 " S5 S65      r8 " S7 S85      r9g)<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                   $    \ rS rSrSrSrSrSrSrg)Language$   z*
Used as Expr.tostring language argument.
r          N)	__name__
__module____qualname____firstlineno____doc__PythonFortranC__static_attributes__r       E/var/www/html/env/lib/python3.13/site-packages/numpy/f2py/symbolic.pyr   r   $   s     FG	Ar   r   c                   T    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrg)Op-   z
Used as Expr op attribute.

               (   d            i,  i  i  i  i  r   N)r   r   r   r   r   INTEGERREALCOMPLEXSTRINGARRAYSYMBOLTERNARYAPPLYINDEXINGCONCAT
RELATIONALTERMSFACTORSREFDEREFr   r   r   r   r   r   -   sT     GDGFEFGEHFJEG
CEr   r   c                   z    \ rS rSrSrSrSrSrSrSr	Sr
\\R                  4S	 j5       r\R                  4S
 jrSrg)RelOpB   z@
Used in Op.RELATIONAL expression to specify the function part.
r	   r
               c                    U[         R                  L an  [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  S.UR                  5          $ [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  S.U   $ )N).eq..ne..lt..le..gt..ge.)==!=<<=>>=)
r   r   r4   EQNELTLEGTGElower)clsslanguages      r   
fromstringRelOp.fromstringM   s    x'''!HHehh!HHehh!HHehh889	C C hhehhUXXhhUXXUXX??@B 	Br   c                    U[         R                  L ae  [        R                  S[        R                  S[        R
                  S[        R                  S[        R                  S[        R                  S0U    $ [        R                  S[        R                  S[        R
                  S	[        R                  S
[        R                  S[        R                  S0U    $ )Nr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   )	r   r   r4   rG   rH   rI   rJ   rK   rL   selfrP   s     r   tostringRelOp.tostringV   s    x'''HHfehhHHfehhHHfehh88<> > $$#uxx#uxx//35 	5r   r   N)r   r   r   r   r   rG   rH   rI   rJ   rK   rL   classmethodr   r   rQ   rV   r   r   r   r   r4   r4   B   sP     
B	
B	
B	
B	
B	
B$,JJ B B !)

 5r   r4   c                   4    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rg)ArithOp`   z;
Used in Op.APPLY expression to specify the function part.
r	   r
   r6   r7   r8   r9      r   N)r   r   r   r   r   POSNEGADDSUBMULDIVPOWr   r   r   r   rZ   rZ   `   s,     C
C
C
C
C
C
Cr   rZ   c                       \ rS rSrSrg)OpErrorm   r   Nr   r   r   r   r   r   r   r   re   re   m       r   re   c                   L    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrg)
Precedenceq   z,
Used as Expr.tostring precedence argument.
r   r	   r
   r6   r7   r9   r\      r         r   r    r   N)r   r   r   r   r   ATOMPOWERUNARYPRODUCTSUMrI   rG   LANDLORr*   ASSIGNTUPLENONEr   r   r   r   rj   rj   q   sJ     DEEG
C	
B	
BD
CGFEDr   rj   c                 Z    U R                  U5      nUc  X U'   g X2-   nU(       a  X0U'   g X	 g N)get)dkvcs       r   
_pairs_addr      s1    	aAy!EaDr   c                       \ rS rSrSrg)ExprWarning   r   Nrg   r   r   r   r   r      rh   r   r   c                 8    [         R                  " U [        SS9  g )Nr
   )
stacklevel)warningswarnr   )messages    r   ewarnr      s    MM';15r   c                   ,   \ rS rSrSr\\R                  4S j5       rS r	S r
S rS rS rS	 rS
 rS rS r\R&                  \R(                  4S jrS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S  r(S! r)S" r*S#r+g$)%r      z^Represents a Fortran expression as a op-data pair.

Expr instances are hashable and sortable.
c                     [        XS9$ )z.Parse a Fortran expression to a Expr.
        rP   )rQ   )rO   rP   s     r   parse
Expr.parse   s     !//r   c                 `   [        U[        5      (       d   eU[        R                  L ag  [        U[        5      (       a  [	        U5      S:X  d   e[        US   [
        5      (       d   e[        US   [
        [        45      (       d   U5       eGOU[        R                  L ag  [        U[        5      (       a  [	        U5      S:X  d   e[        US   [        5      (       d   e[        US   [
        [        45      (       d   U5       eGOU[        R                  L a(  [        U[        5      (       a  [	        U5      S:X  d   eGOU[        R                  L a  [        U[        5      (       a  [	        U5      S:X  d   e[        US   [        5      (       a  US   S S [	        US   5      S-
  2   S;   d   e[        US   [
        [        45      (       d   U5       eGODU[        R                  L a  [        U5      c   eGO!U[        R                  [        R                  4;   a7  [        U[        5      (       d   e[        S U 5       5      (       d   U5       eGOU[        R                   [        R"                  4;   a  [        U[$        5      (       d   eGOU[        R&                  L am  [        U[        5      (       a  [	        U5      S:X  d   e[        US   5      c   e[        US   [        5      (       d   e[        US   [$        5      (       d   eGO	U[        R(                  L a8  [        U[        5      (       a  [	        U5      S:X  d   e[        US   5      c   eOU[        R*                  L a'  [        U[        5      (       a  [	        U5      S:X  d   eOU[        R,                  [        R.                  4;   a  [        U[0        5      (       d   eOHU[        R2                  L a'  [        U[        5      (       a  [	        U5      S:X  d   eO[5        SU 35      eXl        X l        g )Nr
   r   r	   )z""z''z@@c              3   B   #    U  H  n[        U[        5      v   M     g 7frz   )
isinstancer   ).0items     r   	<genexpr> Expr.__init__.<locals>.<genexpr>   s     ?$$z$--$s   r6   z$unknown op or missing sanity check: )r   r   r$   tuplelenintstrr%   floatr&   r'   r)   hashr(   r-   allr/   r0   dictr+   r,   r*   r1   r2   r   r.   NotImplementedErroropdata)rU   r   r   s      r   __init__Expr.__init__   sc   "b!!!!  dE**s4yA~==d1gs++++d1gSz228D82277] dE**s4yA~==d1gu----d1gSz228D822::dE**s4yA~==~299_ dE**s4yA~==tAw,,Q 0#d1g,q. 015GGI Hd1gSz2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                     [        U[        5      =(       a8    U R                  UR                  L =(       a    U R                  UR                  :H  $ rz   )r   r   r   r   rU   others     r   __eq__Expr.__eq__   s;    5$' ,GGuxx',II+	-r   c                    U R                   [        R                  [        R                  4;   a-  [	        [        U R                  R                  5       5      5      nOiU R                   [        R                  L a@  U R                  S S [	        [        U R                  S   R                  5       5      5      -   nOU R                  n[        U R                   U45      $ Nr
   )
r   r   r/   r0   r   sortedr   itemsr+   r   )rU   r   s     r   __hash__Expr.__hash__   s    77rxx,,		 123DWW 99Ra=5		!0B0B0D)E#FFD99DTWWdO$$r   c                 |   [        U[        5      (       Ga  U R                  UR                  La-  U R                  R                  UR                  R                  :  $ U R                  [        R
                  [        R                  4;   aY  [        [        U R                  R                  5       5      5      [        [        UR                  R                  5       5      5      :  $ U R                  [        R                  L a  U R                  S S UR                  S S :w  a  U R                  S S UR                  S S :  $ [        [        U R                  S   R                  5       5      5      [        [        UR                  S   R                  5       5      5      :  $ U R                  UR                  :  $ [        $ r   )r   r   r   valuer   r/   r0   r   r   r   r   r+   NotImplementedr   s     r   __lt__Expr.__lt__   s;   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                      X:H  =(       d    X:  $ rz   r   r   s     r   __le__Expr.__le__  s    DM$AT\Ar   c                     X::  + $ rz   r   r   s     r   __gt__Expr.__gt__
  s
    $77r   c                     X:  + $ rz   r   r   s     r   __ge__Expr.__ge__  s
    $66r   c                 h    [        U 5      R                   SU R                   SU R                  < S3$ N(, ))typer   r   r   rU   s    r   __repr__Expr.__repr__  s.    t*%%&ay499-qAAr   c                 "    U R                  5       $ rz   )rV   r   s    r   __str__Expr.__str__  s    }}r   c           	      :  ^ U R                   [        R                  [        R                  4;   au  U R                  S   S:  a  [
        R                  O[
        R                  n[        U R                  S   5      U R                  S   S:w  a  SU R                  S    3OS-   nG	O5U R                   [        R                  L a?  SR                  U4S jU R                   5       5      nSU-   S	-   n[
        R                  nGOU R                   [        R                  L a'  [
        R                  n[        U R                  5      nGOU R                   [        R                  L aI  U R                  S   nU R                  S   S:w  a  U R                  S   S-   U-   n[
        R                  nGO/U R                   [        R                  L a?  SR                  U4S
 jU R                   5       5      nSU-   S-   n[
        R                  nGOU R                   [        R                  L Ga$  / n[        U R                  R!                  5       5       H  u  pgUS:  a  SnU* nOSnUS:X  a  UR#                  [
        R                  TS9nO?U[%        S5      :X  a  [        U5      nO$U S3UR#                  [
        R&                  TS9-   nU(       a  UR)                  U5        OUS:X  a  UR)                  S5        UR)                  U5        M     SR                  U5      =(       d    SnU(       a  [
        R                  O[
        R                  nGOU R                   [        R*                  L Ga  / n	/ n
[        U R                  R!                  5       5       GH2  u  pSnUS:X  a  UR#                  [
        R&                  TS9nOT[,        R.                  L a  U[1        SS5      ;   a4  UR#                  [
        R&                  TS9nSR                  U/U-  5      nOU[1        SS5      ;   a)  UR#                  [
        R&                  TS9nX/U* -  -  n
M  UR#                  [
        R2                  TS9nSU SU S	3nO$UR#                  [
        R4                  TS9SU 3-   nU	(       a  U	R)                  U5        U	R)                  U5        GM5     U
(       a%  U	(       d  U	S/-  n	U	SSSR                  U
5      S	/-  n	SR                  U	5      =(       d    SnU	(       a  [
        R&                  O[
        R                  nGOU R                   [        R6                  L Ga#  U R                  u  pnU[8        R:                  L a^  T[,        R.                  L aK  U Vs/ s H!  nUR#                  [
        R&                  TS9PM#     snu  nnU SU 3n[
        R&                  nGOU Vs/ s H!  nUR#                  [
        R2                  TS9PM#     nnUUR!                  5        VVs/ s H+  u  nnUS-   UR#                  [
        R<                  5      -   PM-     snn-  nU SSR                  U5       S	3n[
        R                  nGOeU R                   [        R>                  L as  U R                  S   nU R                  SS  Vs/ s H!  nUR#                  [
        R2                  TS9PM#     nnU SSR                  U5       S3n[
        R                  nGOU R                   [        R@                  L a[  U R                   Vs/ s H!  nUR#                  [
        R&                  TS9PM#     nnSR                  U5      n[
        R&                  nGO]U R                   [        RB                  L a  U R                   Vs/ s H!  nUR#                  [
        R2                  TS9PM#     snu  nnnT[,        R.                  L a  SU SU SU S	3nO[T[,        RD                  L a  SU S U S!U S	3nO;T[,        RF                  L a  S"U SU SU S	3nO[I        S#U R                    S$T 35      e[
        R                  nGOvU R                   [        RJ                  L a=  S%U R                  R#                  [
        RL                  TS9-   n[
        RL                  nGOU R                   [        RN                  L a<  S&U R                  R#                  [
        RL                  TS9-   n[
        RL                  nOU R                   [        RP                  L a  U R                  u  nnnU[R        RT                  [R        RV                  4;   a  [
        RT                  O[
        RX                  nUR#                  UTS9nUR#                  UTS9nUR#                  TS9nU S'U S'U 3nO[I        S(U R                    35      eURZ                  URZ                  :  a  SU-   S	-   $ U$ s  snf s  snf s  snnf s  snf s  snf s  snf ))z0Return a string representation of Expr.
        r   r	   r7   _ r   c              3   `   >#    U  H#  nUR                  [        R                  TS 9v   M%     g7fr   NrV   rj   rw   r   r   rP   s     r   r    Expr.tostring.<locals>.<genexpr>  +      1&/d --
(8(88-L&/   +.r   r   c              3   `   >#    U  H#  nUR                  [        R                  TS 9v   M%     g7fr   r   r   s     r   r   r   +  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   rj   rs   ro   r   r&   joinr)   r'   r(   r/   r   r   rV   	as_numberrr   appendr0   r   r   rangerw   rp   r+   rZ   rb   rx   r,   r-   r*   r   r   r   r1   rq   r2   r.   r4   rG   rH   rI   r   )rU   parent_precedencerP   
precedencertermstermcoeffr   factorstailbaseexpfactornameargskwargsargnumerdenomr}   r~   acondexpr1expr2ropleftrights     `                          r   rV   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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	!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>(h2h2(h0(h((hc                     U $ rz   r   r   s    r   __pos__Expr.__pos__  s    r   c                     U S-  $ )Nr   r   s    r   __neg__Expr.__neg__  s    byr   c                    [        U5      n[        U[        5      (       Ga  U R                  UR                  L GaN  U R                  [        R
                  [        R                  4;   aM  [        U R                  S   UR                  S   -   [        U R                  S   UR                  S   5      5      $ U R                  [        R                  L a,  U R                  u  p#UR                  u  pE[        X$-   X5-   5      $ U R                  [        R                  L am  [        U R                  [        U R                  5      5      nUR                  R                  5        H  u  px[        UR                  Xx5        M     [!        U5      $ U R                  [        R                  L a<  UR                  [        R
                  [        R                  4;   a  U [        U5      -   $ U R                  [        R
                  [        R                  4;   a+  UR                  [        R                  L a  [        U 5      U-   $ U R                  [        R                  L a6  UR                  [        R
                  L a  U [#        XR                  S   S9-   $ U R                  [        R
                  L a6  UR                  [        R                  L a  [#        XR                  S   S9U-   $ [%        U 5      [%        U5      -   $ [&        $ Nr   r	   )kind)as_exprr   r   r   r   r$   r%   r   r   maxr&   
as_complexr/   r   r   r   	normalizeas_realas_termsr   )	rU   r   r1i1r2i2r   r}   r~   s	            r   __add__Expr.__add__  s	   eT""ww%(("77rzz27733$		!uzz!}4DIIaL%**Q-8: : 77bjj(!YYFB"ZZFB%bgrw7777bhh&TWWd499o6A %

 0 0 2"1661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                 T    [        U[        5      (       a  [        U5      U -   $ [        $ rz   r   number_typesr   r   r   s     r   __radd__Expr.__radd__  %    e\**U#d**r   c                     X* -   $ rz   r   r   s     r   __sub__Expr.__sub__  s    vr   c                 T    [        U[        5      (       a  [        U5      U -
  $ [        $ rz   r  r   s     r   __rsub__Expr.__rsub__  r  r   c                    [        U5      n[        U[        5      (       Ga  U R                  UR                  L Ga  U R                  [        R
                  [        R                  4;   aM  [        U R                  S   UR                  S   -  [        U R                  S   UR                  S   5      5      $ U R                  [        R                  L a6  U R                  u  p#UR                  u  pE[        X$-  X5-  -
  X%-  XC-  -   5      $ U R                  [        R                  L am  [        U R                  [        U R                  5      5      nUR                  R                  5        H  u  px[        UR                  Xx5        M     [!        U5      $ U R                  [        R"                  L a  [        U R                  0 5      nU R                  R                  5        HC  u  pUR                  R                  5        H   u  p[        UR                  X-  X-  5        M"     ME     [!        U5      $ U R                  [        R                  L a<  UR                  [        R
                  [        R                  4;   a  U [        U5      -  $ UR                  [        R                  L a<  U R                  [        R
                  [        R                  4;   a  [        U 5      U-  $ U R                  [        R                  L a6  UR                  [        R
                  L a  U [%        XR                  S   S9-  $ U R                  [        R
                  L a6  UR                  [        R                  L a  [%        XR                  S   S9U-  $ U R                  [        R"                  L a  U ['        U5      -  $ UR                  [        R"                  L a  ['        U 5      U-  $ [)        U 5      [)        U5      -  $ [*        $ r  )r	  r   r   r   r   r$   r%   r   r   r
  r&   r  r0   r   r   r   r  r/   r  r  
as_factorsr   )rU   r   r  r  r  r  r   r}   r~   t1c1t2c2s                r   __mul__Expr.__mul__  s   eT""ww%(("77rzz27733$TYYq\EJJqM%A%(1uzz!}%EG GWW

*!YYFB"ZZFB%bg&7279JKK77bjj(TWWd499o6A %

 0 0 2"16610 !3$Q<'WW(TWWb)A"&))//"3&+jj&6&6&8FB&qvvrw@ '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                 T    [        U[        5      (       a  [        U5      U -  $ [        $ rz   r  r   s     r   __rmul__Expr.__rmul__  r  r   c                 d   [        U5      n[        U[        5      (       Ga
  UR                  [        R
                  L a  UR                  S   nUS:X  a  [        S5      $ US:X  a  U $ US:  a|  U R                  [        R                  L aU  [        U R                  0 5      nU R                  R                  5        H  u  pEXR-  UR                  U'   M     [        U5      $ X US-
  -  -  $ US:w  a  X* -  S-  $ [        [        R                  X05      $ [        [        R                  X5      $ [        $ )Nr   r	   r  )r	  r   r   r   r   r$   r   r   r0   r   r  as_applyrZ   rc   r   )rU   r   exponentr   r}   r~   s         r   __pow__Expr.__pow__  s    eT""xx2::% ::a=q=$Q<'q=Ka<ww"**, "-$(IIOO$5DA()AFF1I %6(|+HqL#9::^ Y/B66BJJ(899GKK55r   c                     [        U5      n[        U[        5      (       a#  [        [	        [
        R                  X5      5      $ [        $ rz   )r	  r   r   r  r-  rZ   rb   r   r   s     r   __truediv__Expr.__truediv__  s6    eT"" Xgkk4?@@r   c                 V    [        U5      n[        U[        5      (       a  X-  $ [        $ rz   r	  r   r   r   r   s     r   __rtruediv__Expr.__rtruediv__"  s&    eT""<r   c                     [        U5      n[        U[        5      (       a$  [        [        [        R
                  X45      5      $ [        $ rz   )r	  r   r   r  r   r-   r   r   s     r   __floordiv__Expr.__floordiv__(  s8    eT"" T"))d];<<r   c                 V    [        U5      n[        U[        5      (       a  X-  $ [        $ rz   r5  r   s     r   __rfloordiv__Expr.__rfloordiv__0  s&    eT""= r   c           	      x    [        U /[        [        U5      Q70 [        S UR	                  5        5       5      D6$ )Nc              3   @   #    U  H  u  pU[        U5      4v   M     g 7frz   r	  r   r}   r~   s      r   r    Expr.__call__.<locals>.<genexpr>=  s     J>4171:>   )r-  mapr	  r   r   )rU   r   r   s      r   __call__Expr.__call__6  s>      Ls7D1 LJ6<<>JJL 	Lr   c                     [        U5      n[        U[        5      (       d  U4n[        U5      S:  a  [	        SU S35        [        [        R                  U 4U-   5      $ )Nr	   z/C-index should be a single expression but got ``)r	  r   r   r   r   r   r   r,   )rU   indexs     r   __getitem__Expr.__getitem__?  sU     %''FEu:>CE7!LMBKK$511r   c           	      b
  ^ U R                   [        R                  L aq  TR                  U 5      nUc  U $ [        R
                  " SU R                  5      nU(       a1  UR                  5       u  pEUS;   a  [        U5      $ US:X  d   XR45       eU$ U R                   [        R                  [        R                  [        R                  4;   a  U $ U R                   [        R                  [        R                  4;   a3  [        U R                   [        U4S jU R                   5       5      5      $ U R                   [        R                   L a<  [#        [        U R                   [        U4S jU R                   5       5      5      5      $ U R                   [        R$                  L ao  SnU R                  R'                  5        H4  u  pxUc  UR)                  T5      U-  nM  XgR)                  T5      U-  -  nM6     Uc  [+        S5        [-        S5      $ U$ U R                   [        R.                  L ao  SnU R                  R'                  5        H4  u  pUc  U	R)                  T5      U
-  nM  XiR)                  T5      U
-  -  nM6     Uc  [+        S	5        [-        S
5      $ U$ U R                   [        R0                  L a  U R                  u  pn[3        U[        5      (       a  UR)                  T5      n[        U4S jU 5       5      n[5        U4S jUR'                  5        5       5      n[#        [        U R                   XU45      5      $ U R                   [        R6                  L az  U R                  S   n[3        U[        5      (       a  UR)                  T5      n[        U4S jU R                  S
S  5       5      n[#        [        U R                   U4U-   5      5      $ U R                   [        R8                  L a>  [        U4S jU R                   5       5      n[#        [        U R                   U5      5      $ U R                   [        R:                  [        R<                  4;   a8  [#        [        U R                   U R                  R)                  T5      5      5      $ U R                   [        R>                  L aT  U R                  u  nnnUR)                  T5      nUR)                  T5      n[#        [        U R                   UUU45      5      $ [A        SU R                    SU < 35      e)ztRecursively 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   F   >#    U  H  nUR                  T5      v   M     g 7frz   
substituter   r   symbols_maps     r   r   "Expr.substitute.<locals>.<genexpr>]  s$      '>3<4 (,{'C'C3<   !c              3   F   >#    U  H  nUR                  T5      v   M     g 7frz   rR  rT  s     r   r   rV  `  s%      1H=FT 261M1M=FrW  z?substitute: empty TERMS expression interpreted as int-literal 0r   zAsubstitute: empty FACTORS expression interpreted as int-literal 1r	   c              3   D   >#    U  H  oR                  T5      v   M     g 7frz   rR  r   r   rU  s     r   r   rV  ~  s     ADqk22D    c              3   L   >#    U  H  u  pXR                  T5      4v   M     g 7frz   rR  )r   r}   r~   rU  s      r   r   rV    s&      6&4da ll;78&4s   !$c              3   D   >#    U  H  oR                  T5      v   M     g 7frz   rR  rZ  s     r   r   rV    s     JMqk22Mr[  c              3   D   >#    U  H  oR                  T5      v   M     g 7frz   rR  rZ  s     r   r   rV    s     J	1\\+66	r[  zsubstitute method for z: )!r   r   r)   r{   rematchr   groupsas_arrayr$   r%   r'   r(   r&   r   r   r-   r  r/   r   rS  r   r   r0   r+   r   r   r,   r*   r1   r2   r.   r   )rU   rU  r   mr   parenr   r   r   r   r.  targetr   r   funcoperandsr   r   r   s    `                 r   rS  Expr.substituteI  s
   
 77biiOOD)E}@$))LA xxz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94u<A5==A	  1
 y ' ( |#H77bjj A"&))//"394@A5AAA	 #4
 y * + |#H77bhh#'99 F&&$''**;7ADAAD 6&,lln6 6FT$''F&+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           
      <  ^^^ T" U /TQ70 TD6nUb  U$ U R                   [        R                  [        R                  [        R                  [        R
                  4;   a  U $ U R                   [        R                  [        R                  [        R                  [        R                  4;   a>  [        [        U R                   [        UUU4S jU R                   5       5      5      5      $ U R                   [        R                  [        R                  4;   a  0 nU R                  R!                  5        HX  u  pgUR"                  " T/TQ70 TD6n[%        U[        5      (       a  UR"                  " T/TQ70 TD6OUnXe;   a  XV   U-   nXuU'   MZ     [        [        U R                   U5      5      $ U R                   [        R&                  L a  U R                  S   n[%        U[        5      (       a  UR"                  " T/TQ70 TD6OUn	[        UUU4S jU R                  S    5       5      n
[)        UUU4S jU R                  S   R!                  5        5       5      n[        [        U R                   XU45      5      $ U R                   [        R*                  L a  U R                  S   n[%        U[        5      (       a  UR"                  " T/TQ70 TD6OUn[        UUU4S jU R                  SS  5       5      n[        [        U R                   U4U-   5      5      $ U R                   [        R,                  [        R.                  4;   a=  [        [        U R                   U R                  R"                  " T/TQ70 TD65      5      $ U R                   [        R0                  L a\  U R                  u  pnUR"                  " T/TQ70 TD6nUR"                  " T/TQ70 TD6n[        [        U R                   XU45      5      $ [3        S	U R                    35      e)
a  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   P   >#    U  H  nUR                   " T/TQ70 TD6v   M     g 7frz   traverse)r   r   r   r   visits     r   r    Expr.traverse.<locals>.<genexpr>  s+      1'%D e5d5f5%   #&r   c              3   P   >#    U  H  nUR                   " T/TQ70 TD6v   M     g 7frz   rk  )r   operandr   r   rm  s     r   r   rn    s-      :,8 %--eEdEfE,8ro  r	   c              3   V   >#    U  H  u  pXR                   " T/TQ70 TD64v   M      g 7frz   rk  )r   r}   r~   r   r   rm  s      r   r   rn    s1      @*>$!  !**U"DT"DV"DE*>s   &)r
   c              3   P   >#    U  H  nUR                   " T/TQ70 TD6v   M     g 7frz   rk  )r   rI  r   r   rm  s     r   r   rn    s+      8)6 "NN5B4B6B)6ro  ztraverse method for )r   r   r$   r%   r'   r)   r&   r(   r-   r*   r  r   r   r   r/   r0   r   rl  r   r+   r   r,   r1   r2   r.   r   )rU   rm  r   r   resultr   r}   r~   objrf  rg  
kwoperandsindicesr   r   r   s    ```            r   rl  Expr.traverse  sY    t-d-f-M77rzz277BIIryyAAKWWRXXryy"**EET$''5 1' II1' ,' ( ) ) WW2::..D		)JJu6t6v6"1d++ ZZ77712 9!AQ * T$''4011WW ))A,C!#t,, LL88825  :,0IIaL: :H @*.))A,*<*<*>@ @JT$''DJ+GHIIWW#))A,C d++ <<77714  8)-128 8GT$''C6G+;<==WW**T$''"&))"4"4U"LT"LV"LN O OWW%#yyCu==888DNN5:4:6:ET$''Cu+=>??!$8	"BCCr   c                 X   ^ / nU4U4S jjnU R                  U5        [        U5      S:g  $ )z&Check if self contains other.
        c                 J   > U(       a  U $ U T:X  a  UR                  S5        U $ g )Nr	   )r   )exprfoundr   s     r   rm  Expr.contains.<locals>.visit  s'    Q r   r   )rl  r   )rU   r   r|  rm  s    `  r   containsExpr.contains  s.     # 	 	e5zQr   c                 H    [        5       nU4S jnU R                  U5        U$ )z3Return a set of symbols contained in self.
        c                 b    U R                   [        R                  L a  UR                  U 5        g g rz   )r   r   r)   add)r{  r|  s     r   rm  Expr.symbols.<locals>.visit  s"    ww"))#		$ $r   setrl  rU   r|  rm  s      r   symbolsExpr.symbols  s&     # 	  	er   c                 P   ^ [        5       nU4U4S jjmU R                  T5        U$ )zFReturn a set of expressions used as atoms in polynomial self.
        c                   > U R                   [        R                  L a&  U R                   H  nUR	                  T5        M     U $ U R                   [        R
                  [        R                  4;   a  g U R                   [        R                  L af  [        U R                  S   [        5      (       aD  U R                  S   [        R                  L a#  U R                  S   S   R	                  T5        U $ g U R                   [        R                  [        R                  4;   a  U $ UR                  U 5        U R                   [        R                  [        R                  4;   a  U $ g Nr   r	   )r   r   r0   r   rl  r/   r&   r+   r   rZ   rc   r$   r%   r  r,   )r{  r|  brm  s      r   rm  $Expr.polynomial_atoms.<locals>.visit  s    ww"**$AJJu% #ww288RZZ00ww"(("z$))A,'H'H99Q<7;;.IIaLO,,U3Kww2::rww//IIdOww2;;11 2r   r  r  s     @r   polynomial_atomsExpr.polynomial_atoms  s'     # 	( 	er   c                     U R                  U[        S5      05      nX-
  nUR                  U[        S5      05      n[        XA-  U-
  5      u  pVU[        S5      :w  a  [        SU SU SU SU SU  3
5      eXB4$ )zqReturn 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 == )rS  r   as_numer_denomRuntimeError)rU   symbolr  axr   zeror   s          r   linear_solveExpr.linear_solve  s    
 OOVYq\23XMM69Q<01 b19Q<x 0##$#SA3d4& B C Ctr   )r   r   N),r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   rj   rx   r   rV   r   r  r  r  r  r  r'  r*  r/  r2  r6  r9  r<  rE  rJ  rS  rl  r~  r  r  r  r   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           	      :   [        U [        5      (       d  U $ U R                  [        R                  L Ga  0 nU R
                  R                  5        H  u  p#US:X  a  M  UR                  [        R                  L a  US:w  a  X#-  nSnUR                  [        R                  L a3  UR
                  R                  5        H  u  pE[        XXS-  5        M     M  [        XU5        M     [        U5      S:X  a  [        S5      $ [        U5      S:X  a  UR                  5       u  u  p#US:X  a  U$ [        [        R                  U5      $ U R                  [        R                  L Gaa  Sn0 nU R
                  R                  5        GHJ  u  pxUS:X  a  M  UR                  [        R                  L a'  [        U[        5      (       a  US:  a  XwUS-
  -  -  nSnUR                  [        R                  [        R                  4;   aC  US:X  a  XgR
                  S   -  nM  US:  a  XgR
                  S   U-  -  nM  [        XU5        M  UR                  [        R                  L a^  US:  aI  [        U[        5      (       a4  UR
                  R                  5        H  u  p[        XX-  5        M     GM/  [        XU5        GM>  [        XU5        GMM     [        U5      S:X  d  US:X  a"  [        U[        5      (       d   e[        U5      $ [        U5      S:X  aZ  UR                  5       u  u  pxUS:X  a  UnO[        [        R                  U5      nUS:X  a  U$ [        [        R                  X&05      $ US:X  a  [        [        R                  U5      $ [        [        R                  [        [        R                  U5      U05      $ U R                  [        R                   L Ga  U R
                  S   ["        R$                  L Ga  U R
                  S   u  p['        U5      u  pE['        U5      u  p[        U[        5      (       a(  [        U[        5      (       a  [)        X^5      nX_-  X-  pOX^-  SpUR                  [        R                   L ah  UR
                  S   ["        R$                  L aH  UR
                  S   S   U-  nUR
                  S   S   U-  U-  n[+        ["        R$                  UU5      $ UR                  [        R                   L ah  UR
                  S   ["        R$                  L aH  UR
                  S   S   U-  U-  nUR
                  S   S   U-  n[+        ["        R$                  UU5      $ [-        [/        U5      R
                  5      n[/        U5      R
                  R                  5        H  u  px[        XU* 5        M     0 0 nnUR                  5        H  u  pxUS:  a  UUU'   M  U* UU'   M     [1        [        [        R                  U5      5      U-  n[1        [        [        R                  U5      5      U-  nUR                  [        R                  [        R                  4;   a  UR
                  S   S:X  a  U$ [+        ["        R$                  UU5      $ U R                  [        R2                  L GaC  U R
                  S   /nU R
                  SS  H  nUS   nUR                  [        R4                  L a  UR                  [        R4                  L a  UR
                  S   S   S;   a  UR
                  S   S   UR
                  S   S   :X  aZ  [7        UR
                  S   SS UR
                  S   SS -   [9        UR
                  S   UR
                  S   5      5      nUUS'   M  UR;                  U5        M     [        U5      S:X  a  US   $ [        [        R2                  [=        U5      5      $ U R                  [        R>                  L ap  [A        [0        U R
                  5      u  nnnUR                  [        R                  L a  UR
                  S   (       a  U$ U$ [        [        R>                  UUU45      $ U $ )z7Normalize Expr and apply basic evaluation methods.
    r   r	   Nr  z"')!r   r   r   r   r/   r   r   r&   r   r   r   r0   integer_typesr$   r%   r  r+   rZ   rb   as_term_coeffr   r-  r   r"  r  r-   r'   	as_stringr
  r   r   r*   rD  )ru  r|   tr   r#  r$  r   r  eb1e1dividenddivisorr%  r&  gr   r   lstrO   lastnew_lastr   r   r   s                            r   r  r    s    c4  

vvHHNN$DAAvttrzz!a1fEttrxxffllnFBqbf- - 1# % q6Q;Q<Vq[ggiGFQAvBHHa  
vvHHNN$DAAvttrxxJq-$@$@QUq1u&tt

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

A&&4

A#6">??
vvchhqkW[[8HHQKx(w'b-((ZM-J-JBAUBEUA55BHHw{{!:GGAJqMB&EGGAJqMB&+EGKK6655BHHw{{!:GGAJqMB&+EGGAJqMB&EGKK66B$$%rN''--/DAqaR  02uGGIDA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                 ^   [        U [        5      (       a   [        U R                  U R                  5      $ [        U [
        5      (       a  [        U 5      $ [        U [        5      (       a  [        [        U 5      5      $ [        U [        5      (       a  [        [        [        U 5      5      $ U $ )z.Convert non-Expr objects to Expr objects.
    )r   complexr  realimagr  r   r   r  reprr   rD  r	  ru  s    r   r	  r	    s     #w#((CHH--#|$$~#s c###uS#&''Jr   c                 6    [        [        R                  U 5      $ )zJReturn object as SYMBOL expression (variable or unparsed expression).
    )r   r   r)   r  s    r   	as_symbolr    s     		3r   c                 j   [        U [        5      (       a  [        [        R                  X45      $ [        U [
        5      (       a  [        [        R                  X45      $ [        U [        5      (       a0  U R                  [        R                  [        R                  4;   a  U $ [        SU  S35      e)z/Return object as INTEGER or REAL constant.
    cannot convert z to INTEGER or REAL constant)	r   r   r   r   r$   r   r%   r   re   ru  r  s     r   r   r     s     #sBJJ,,#uBGGc[))#t66bjj"''**J
OC5(DE
FFr   c                     [        U [        5      (       a  [        [        R                  X45      $ [        U [        5      (       a  U R
                  [        R                  L a  U $ [        SU  S35      e)z'Return object as INTEGER constant.
    r  z to INTEGER constant)r   r   r   r   r$   r   re   r  s     r   
as_integerr    s[     #sBJJ,,#t66RZZJ
OC5(<=
>>r   c                    [        U [        5      (       a%  [        [        R                  [        U 5      U45      $ [        U [
        5      (       a  [        [        R                  X45      $ [        U [        5      (       an  U R                  [        R                  L a  U $ U R                  [        R                  L a2  [        [        R                  [        U R                  S   5      U45      $ [        SU  S35      e)z$Return object as REAL constant.
    r   r  z to REAL constant)
r   r   r   r   r%   r   r   r$   r   re   r  s     r   r  r    s     #sBGGeCj$/00#uBGGc[))#t66RWWJVVrzz!%"4d!;<<
OC5(9:
;;r   c                 8    [        [        R                  X45      $ )zBReturn object as STRING expression (string literal constant).
    )r   r   r'   r  s     r   r  r    s     		C;''r   c                 f    [        U [        5      (       a  U 4n [        [        R                  U 5      $ )z8Return object as ARRAY expression (array constant).
    )r   r   r   r(   r  s    r   rb  rb    s)     #td#r   c                 ^    [        [        R                  [        U 5      [        U5      45      $ )zDReturn object as COMPLEX expression (complex literal constant).
    )r   r   r&   r	  )r  r  s     r   r  r    s"     

WT]GDM:;;r   c           
          [        [        R                  U [        [	        [
        U5      5      [        S UR                  5        5       5      45      $ )zIReturn object as APPLY expression (function call, constructor, etc.)
    c              3   @   #    U  H  u  pU[        U5      4v   M     g 7frz   r@  rA  s      r   r   as_apply.<locals>.<genexpr>  s     A.$!q'!*o.rC  )r   r   r+   r   rD  r	  r   r   )rf  r   r   s      r   r-  r-    sD     uS$/0A&,,.AACD Dr   c                 :    [        [        R                  XU45      $ )z<Return object as TERNARY expression (cond?expr1:expr2).
    )r   r   r*   )r   r   r   s      r   
as_ternaryr    s     

T%011r   c                 6    [        [        R                  U 5      $ )z-Return object as referencing expression.
    )r   r   r1   r{  s    r   as_refr    s     r   c                 6    [        [        R                  U 5      $ )z/Return object as dereferencing expression.
    )r   r   r2   r  s    r   as_derefr    s     $r   c                 V    [        [        R                  [        R                  X45      $ rz   )r   r   r.   r4   rG   r   r   s     r   as_eqr        $677r   c                 V    [        [        R                  [        R                  X45      $ rz   )r   r   r.   r4   rH   r  s     r   as_ner    r  r   c                 V    [        [        R                  [        R                  X45      $ rz   )r   r   r.   r4   rI   r  s     r   as_ltr    r  r   c                 V    [        [        R                  [        R                  X45      $ rz   )r   r   r.   r4   rJ   r  s     r   as_ler    r  r   c                 V    [        [        R                  [        R                  X45      $ rz   )r   r   r.   r4   rK   r  s     r   as_gtr    r  r   c                 V    [        [        R                  [        R                  X45      $ rz   )r   r   r.   r4   rL   r  s     r   as_ger    r  r   c                 ^   [        U [        5      (       Ga   [        U 5      n U R                  [        R
                  L a  U $ U R                  [        R                  L a@  [        [        R
                  [        SU R                  S   5      U R                  S   05      $ U R                  [        R                  L a@  [        [        R
                  [        SU R                  S   5      U R                  S   05      $ [        [        R
                  U S05      $ [        S[        U 5       S35      e)z+Return expression as TERMS expression.
    r	   r   r   to terms Expr)r   r   r  r   r   r/   r$   r  r   r%   r  re   r   r  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                 V   [        U [        5      (       Ga|  [        U 5      n U R                  [        R
                  L a  U $ U R                  [        R                  L a  [        U R                  5      S:X  aq  U R                  R                  5       u  u  pUS:X  a  [        [        R
                  US05      $ [        [        R
                  US[        R                  U5      S05      $ U R                  [        R                  L ar  U R                  S   [        R                  L aR  U R                  S   (       d>  [        [        R
                  U R                  S   S   SU R                  S   S   S05      $ [        [        R
                  U S05      $ [        S[        U 5       S35      e)z-Return expression as FACTORS expression.
    r	   r   r
   r  r  r  )r   r   r  r   r   r0   r/   r   r   r   numberr+   rZ   rb   re   r   )ru  r   r   s      r   r"  r"  2  s0    #tn66RZZJ66RXX388}!!$!1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                 J   [        U [        5      (       Gav  [        U 5      n U R                  [        R
                  L a(  [        SU R                  S   5      U R                  S   4$ U R                  [        R                  L a(  [        SU R                  S   5      U R                  S   4$ U R                  [        R                  L a:  [        U R                  5      S:X  a!  U R                  R                  5       u  u  pX4$ U R                  [        R                  L ai  U R                  S   [        R                  L aI  [!        U R                  S   S   5      u  p4[#        [        R                  X0R                  S   S   5      U4$ U S4$ [%        S['        U 5       S35      e)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+   rZ   rb   r  r-  re   r   )ru  r   r   r  r   s        r   r  r  G  s9    #tn66RZZa!-sxx{::66RWW1chhqk*CHHQK7766RXX388}!!$!1{"66RXX#((1+"< !Q0DAGKKHHQKN;Q>>Av
ODI;.@A
BBr   c                    [        U [        5      (       Ga  [        U 5      n U R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  4;   a  U [        S5      4$ U R                  [        R                  L av  U R                  S   [        R                  L aI  U R                  S   (       d5  [!        ["        U R                  S   5      u  pUS   US   -  US   US   -  4$ U [        S5      4$ U R                  [        R$                  L Ga
  / / p!U R                  R'                  5        H8  u  p4[#        U5      u  pVXT-  nUR)                  U5        UR)                  U5        M:     [        S5      [        S5      p[+        [-        U5      5       H;  n	X   n[+        [-        U5      5       H  n
X:w  d  M
  XRU
   -  nM     Xu-  nXU	   -  nM=     UR                  [        R
                  [        R                  4;   a  UR                  S   S:  a  U* U* pXx4$ U R                  [        R.                  L av  [        S5      [        S5      pU R                  R'                  5        H@  u  p[#        U5      u  pUS:  a  X}U-  -  nXU-  -  nM(  US:  d  M0  X~U* -  -  nXU* -  -  nMB     Xx4$ [1        S[3        U 5       S35      e)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   rZ   rb   rD  r  r/   r   r   r   r   r0   re   r   )ru  numersdenomsr   r   nr|   r   r   ijr  r  bnumerbdenoms                  r   r  r  \  sw    #tn66bjj"''2::ryykk2::/ /	!$$VVrxxxx{gkk)#((1+!$^SXXa[!Aay6!9,fQi&).CCC	!$$VVrxxF"xx~~/%d+Ia a 	  0
 %Q<153v;'Is6{+AvAY , 
" ( xxBJJ00UZZ]Q5F %vvu<VVrzz!$Q<15(!/!2q5q[(Eq[(EU^+E^+E ) <
ODI;.AB
CCr   c               #   &   #    Sn  U S-  n U v   M  7fr  r   )counters    r   _counterr    s      G
1 s   c                    ^ 0 mU4S jn[         R                  " SR                  SSSS9X5      nSU;  d   eSU;  d   eUT4$ )	z_Replace quoted substrings of input string.

Return a new string and a mapping of replacements.
c                    > U R                  5       S S u  pU(       a  US S nSSS.US      nU SU S[        R                  5        S	3nUTU'   U$ )
Nr
   r  SINGLEDOUBLE)'"r   z@__f2py_QUOTES_r   @)ra  COUNTER__next__)rc  r  r   pr}   r|   s        r   repleliminate_quotes.<locals>.repl  sg    hhj!n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  )r_  subformat)rO   r  new_sr|   s      @r   eliminate_quotesr    sh    
 	A FFAHH,, I . 		E ee!8Or   c                     UR                  5        H9  u  p#USUR                  S5       nU(       a  US-  nU R                  X$U-   5      n M;     U $ )z!Inverse of eliminate_quotes.
    Nr  r   )r   findreplace)rO   r|   r}   r~   r  s        r   insert_quotesr    sN     	!&&+CKDIIa"	 
 Hr   c                    Su  p[        U 5      nS H)  u  pEU R                  U5      nUS:X  a  M  Xc:  d  M%  UnXEp!M+     Uc  U 0 4$ UnU R                  X&5      nU R                  XS-   U5      U R                  X&S-   U5      :w  a\  U R                  X'S-   5      nUS:X  a  [        SX-    SU < 35      eU R                  XS-   U5      U R                  X&S-   U5      :w  a  M\  SS	S
SS.U   nSU S[        R                  5        S3n	X[        U5      -   U n
[        X[        U5      -   S 5      u  pXU	'   U SU U	-   U-   U4$ )zrReplace 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 rP  rO  CURLYrN  )r   r   {r  @__f2py_PARENTHESIS_r   r  )r   r  count
ValueErrorr  r  replace_parenthesis)rO   r   r   mn_ileft_right_r  r  r  r}   r~   r   r|   s                r   r  r    sm    KDq6D  FF5M78D%  |"uA	uA
''$Aq
!QWWUE1%=
=FF5a% 7|DJ<7GuMNN ''$Aq
!QWWUE1%=
=
 H7*EdKA
qc7#3#3#5"6a8A	CI+aAq3u:/0DAaDRa519q=!r   c                 d    U R                  S5      (       d   U 5       eU R                  S5      S   $ )Nr  r   r7   )
startswithsplit)rO   s    r   _get_parenthesis_kindr    s/    <<.//22/773<?r   c                     UR                  5        HE  u  p#[        U5      n[        SSSSS9U   n[        SSSS	S9U   nU R                  X%U-   U-   5      n MG     U $ )
z$Inverse of replace_parenthesis.
    r   r   r  r  )rP  rO  r  rN  r   r   }r  )r   r  r   r  )rO   r|   r}   r~   r  r   r   s          r   unreplace_parenthesisr    sh     	!!$#ctDQG3s#EaHIIaE)*	 
 Hr   c                     [        US9R                  U 5      n[        U[        5      (       a  U$ [	        SU  SU S35      e)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 `rH  )_FromStringWorkerr   r   r   r  )rO   rP   r   s      r   rQ   rQ     sG     	8,2215A!T
(+DQCqI
JJr   c                   &    \ rS rSrS rS rS rSrg)_Pairi  c                     Xl         X l        g rz   r  )rU   r   r   s      r   r   _Pair.__init__  s    	
r   c                     U R                   U R                  p2[        U[        5      (       a  UR	                  U5      n[        U[        5      (       a  UR	                  U5      n[        X#5      $ rz   )r   r   r   r   rS  r  )rU   rU  r   r   s       r   rS  _Pair.substitute
  sT    iiedD!!??;/DeT""$$[1ET!!r   c                 f    [        U 5      R                   SU R                   SU R                   S3$ r   )r   r   r   r   r   s    r   r   _Pair.__repr__  s.    t*%%&a		{"TZZLBBr   r  N)r   r   r   r   r   rS  r   r   r   r   r   r  r    s    "Cr   r  c                   J    \ rS rSr\R
                  4S jrS rS rSS jr	Sr
g)	r
  i  c                 ,    S U l         S U l        Xl        g rz   )original
quotes_maprP   rT   s     r   r   _FromStringWorker.__init__  s     r   c                 ,    [        XR                  5      $ rz   )r  r  )rU   rO   s     r   finalize_string!_FromStringWorker.finalize_string  s    Q00r   c                 T    Xl         [        U5      u  o l        U R                  U5      $ rz   )r  r  r  process)rU   inpunquoteds      r   r   _FromStringWorker.parse   s%    $4S$9!/||H%%r   c           	      *  ^ ^^^ [        U[        [        45      (       a  [        U5      " UU 4S jU 5       5      $ [        U[        5      (       d   [        U5      U45       e[        U5      u  nmUR                  5       nUU4S jmSU;   at  T" UR                  S5      5      nTS:X  a  [        T R                  U5      5      $ TS:X  a&  [        U5      S:X  a  [        T R                  U5      6 $ [        ST SU 35      e[        R                  " S	U5      nU(       ae  TS:X  d   T5       eT" UR                  5       5      u  pgnT R                  U5      nT R                  U5      nT R                  U5      n[        XgU5      $ T R                   ["        R$                  L a'  [        R                  " S
U[        R&                  5      nO[        R                  " SU5      nU(       a  UR                  5       u  pnT R                   ["        R$                  L a  SU
-   S-   n
T R                  T" X45      5      u  p[(        R+                  U
T R                   S9n
[-        [.        R0                  XU45      $ [        R                  " SU5      nU(       a5  UR                  5       u  pT" U5      n[3        UT R                  U5      5      $ [        R                  " SU5      n[        U5      S:  a  T R                  T" US   =(       d    S5      5      n[5        USSS2   USSS2   5       HG  u  nnT R                  T" U5      5      nUR                  5       nUS:X  a  UU-  nM:  US:X  d   eUU-  nMI     U$ T R                   ["        R$                  L aO  SU;   aI  T" UR                  S5      5      n[-        [.        R6                  [        T R                  U5      5      5      $ [        R                  " ST R                   ["        R8                  L a  UOUR;                  SS5      5      n[        U5      S:  a  T" U5      nT R                   ["        R8                  La"  U Vs/ s H  nUR;                  SS5      PM     nnT R                  US   5      n[5        USSS2   USSS2   5       HA  u  nnT R                  U5      nUR                  5       nUS:X  a  UU-  nM4  US:X  d   eUU-  nMC     U$ UR=                  S5      (       aM  [.        R>                  [.        R@                  S.US      nT R                  T" USS 5      5      n[-        UU5      $ T R                   ["        R8                  Lag  SU;   aa  [        [C        T" UR                  S5      5      5      5      nT R                  US   5      nUSS  H  nT R                  U5      nUU-  nM     U$ [        R                  " SRE                  SSS 9U5      nU(       aY  UR                  5       u  nnnU(       a   URG                  5       (       a  [I        U5      n[K        [I        U5      U=(       d    S!5      $ [        R                  " S"RE                  S#S$SS%9U5      nU(       a  UR                  5       u  n  nnU(       a   URG                  5       (       a  [I        U5      nURM                  5       nS&U;   a.  [O        [Q        UR;                  S&S'5      5      U=(       d    S(5      $ [O        [Q        U5      U=(       d    S!5      $ UT RR                  ;   a6  USURU                  S)5       n[W        T RR                  U   U=(       d    S5      $ UT;   at  [Y        U5      nT R                  T" TU   5      US*:X  a  SOS5      nUS*:X  a  [        U[,        5      (       a  U$ US+;   a#  [        U[,        5      (       a  U4n[[        U5      $ [        R                  " S,U5      nU(       a  UR                  5       u  nnnT R                  T" U5      5      nT R                  T" U5      SS- S5      n[        U[        5      (       d  U4nUS*:X  a3  []        S. U 5       5      n[        S/ U 5       5      n[_        U/UQ70 UD6$ US0:X  d   eUU   $ [        R                  " S1U5      nU(       a  [a        U5      $ T Rc                  T" U5      5      n[e        S2U< S3T Rf                   S435        [a        U5      $ s  snf )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   H   >#    U  H  nTR                  UT5      v   M     g 7frz   )r  )r   s_contextrU   s     r   r   ,_FromStringWorker.process.<locals>.<genexpr>0  s     Aq4<<G44qs   "c                    > [        U [        [        45      (       a  [        U 5      " [	        TU 5      5      $ [        U T5      $ rz   )r   listr   r   rD  r  )r   raw_symbols_maprestores    r   r(  *_FromStringWorker.process.<locals>.restore8  s6    !dE]++Aws7A//(O<<r   ,r   r{  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  r7   z7\A({significant}({exponent}|)|\d+{exponent})({kind}|)\Zz[.]\d+|\d+[.]\d*z[edED][+-]?\d+)significantr.  r  r|   r     r  rP  rM  z4\A(.+)\s*(@__f2py_PARENTHESIS_(ROUND|SQUARE)_\d+@)\Zr  c              3      #    U  H4  n[        U[        5      (       d  M  UR                  UR                  4v   M6     g 7frz   )r   r  r   r   r   r   s     r   r   r$    s.      7A!+Au!5 0qvvqww/s   >>c              3   T   #    U  H  n[        U[        5      (       a  M  Uv   M      g 7frz   )r   r  r1  s     r   r   r$    s     I1Jq%4HQQs   (	(rO  z\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r   )4r   r&  r   r   r   r  stripr  r  r   r  r   r_  r`  ra  r  rP   r   r   Ir4   rQ   r   r   r.   r  zipr-   r   r  r  r2   r1   reversedr  isdigitr   r  rM   r  r   r  r  r  r  rb  r   r-  r  r  r   r  )rU   rO   r#  r   rg  rc  operr   r   r   r   r   keynamer   rt  r   rq  r   r  rd  r   re  r   r   r'  r(  s   ` `                     @@r   r  _FromStringWorker.process%  s,    a$''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d511 ==H,,,>244IA JAOA xxzDu}} 0 00Ci#o,,w}'=>KD""3"?C5'9:: HH2A6XXZNG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   d)rP   r  r  Nr  )r   r   r   r   r   r   r   r  r   r  r   r   r   r   r
  r
    s     (

 !
1&
Hr   r
  )r7   )r	   )r   ):r   __all__r_  r   enumr   mathr   r   r   r4   rZ   	Exceptionre   rj   r   r  r   r  r   UserWarningr   r   r   r  r	  r  r   r  r  r  rb  r  r-  r  r  r  r  r  r  r  r  r  r  r"  r  r  r  r  r  r  r  r  r  r   rQ   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   