
    G/Ph                     D   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d;dZd;dZd;d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.d0 Z/ e/            Z0d1 Z1d2 Z2d3 Z3d4 Z4d5 Z5ej6        fd6Z7 G d7 d8          Z8 G d9 d:          Z9dS )>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dS )Languagez2
    Used as Expr.tostring language argument.
    r         N)__name__
__module____qualname____doc__PythonFortranC     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/f2py/symbolic.pyr   r   $   s)          FG	AAAr   r   c                   N    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dS )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   -   se          GDGFEFGEHFJEG
CEEEr   r   c                   b    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d
S )RelOpzH
    Used in Op.RELATIONAL expression to specify the function part.
    r   r	               c                 n   |t           j        u r]t          j        t          j        t          j        t          j        t          j        t          j        d|	                                         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'''!Heh!Heh!Heh8 889		C C hehUXhUXUX? ??@B 	Br   c                 ^   |t           j        u rPt          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'''HfehHfehHfeh88<> > $$#ux#ux//35 	5r   N)r
   r   r   r   rB   rC   rD   rE   rF   rG   classmethodr   r   rL   rP   r   r   r   r0   r0   B   s          
B	
B	
B	
B	
B	
B$,J B B B [B !)
 5 5 5 5 5 5r   r0   c                   .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
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
CCCr   rS   c                       e Zd ZdS )OpErrorNr
   r   r   r   r   r   r]   r]   m           Dr   r]   c                   F    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S )
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   s[          DEEG
C	
B	
BD
CGFEDDDr   ra   c                 d    |                      |          }||| |<   d S ||z   }|r|| |<   d S | |= d S N)get)dkvcs       r   
_pairs_addrv      sL    	aAy!E 	AaDDD!r   c                       e Zd ZdS )ExprWarningNr^   r   r   r   rx   rx      r_   r   rx   c                 >    t          j        | t          d           d S )Nr	   )
stacklevel)warningswarnrx   )messages    r   ewarnr~      s    M';155555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)d"S )#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 rut          |t                    rt	          |          dk    sJ t          |d         t
                    sJ t          |d         t
          t          f          s
J |            n|t          j        u rut          |t                    rt	          |          dk    sJ t          |d         t                    sJ t          |d         t
          t          f          s
J |            n!|t          j	        u r,t          |t                    rt	          |          dk    sJ n|t          j
        u rt          |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          s
J |            n;|t          j        u rt          |          J n|t          j        t          j        fv r<t          |t                    sJ t          d |D                       s
J |            n|t          j        t          j        fv rt          |t$                    sJ n|t          j        u r}t          |t                    rt	          |          dk    sJ t          |d                   J t          |d         t                    sJ t          |d         t$                    sJ n|t          j        u rBt          |t                    rt	          |          dk    sJ t          |d                   J n|t          j        u r+t          |t                    rt	          |          dk    sJ n}|t          j        t          j        fv rt          |t0                    sJ nK|t          j        u r+t          |t                    rt	          |          dk    sJ nt5          d|           || _        || _        d S )Nr	   r   r   )z""z''z@@c              3   @   K   | ]}t          |t                    V  d S rp   )
isinstancer   ).0items     r   	<genexpr>z Expr.__init__.<locals>.<genexpr>   s,      ??$z$--??????r   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**=s4yyA~~~~d1gs+++++d1gSz2288D888827]] dE**=s4yyA~~~~d1gu-----d1gSz2288D88882:dE**=s4yyA~~~~~29__ dE**=s4yyA~~~~tAw,, IQ 0 0#d1g,,q. 015GGGGGd1gSz2288D888829__::))))BHbi(((dE*****??$?????EEEEEEBHbj))) dD))))))28^^ dE**=s4yyA~~~~Q==,,,d1gu-----d1gt,,,,,,2;dE**=s4yyA~~~~Q==,,,,2:dE**=s4yyA~~~~~BFBH%%%dD))))))2=  dE**=s4yyA~~~~~%;r;;= = = 			r   c                 h    t          |t                    o| j        |j        u o| j        |j        k    S rp   )r   r   r   r   rO   others     r   __eq__zExpr.__eq__   s6    5$'' ,Gux',I+	-r   c                    | j         t          j        t          j        fv r4t	          t          | j                                                            }nd| j         t          j        u rJ| j        d d         t	          t          | j        d                                                             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    7rx,,,	 1 12233DDW  9RaR=5	!0B0B0D0D)E)E#F#FFDD9DTWdO$$$r   c                 H   t          |t                    r| j        |j        ur| j        j        |j        j        k     S | j        t          j        t          j        fv rht          t          | j	        
                                                    t          t          |j	        
                                                    k     S | j        t          j        u r| j	        d d         |j	        d d         k    r | j	        d d         |j	        d d         k     S t          t          | j	        d         
                                                    t          t          |j	        d         
                                                    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__   sP   eT"" 	*weh&&w}ux~55w28RZ000fTY__%6%67788uz'7'7'9'9 : :;;< =w"(""9RaR=EJrrN229RaR=5:bqb>99VDIaL$6$6$8$899::U5:a=..0011>3 >3 3 39uz))r   c                     | |k    p| |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                 P    t          |           j         d| j         d| j        dS N(, ))typer
   r   r   rO   s    r   __repr__zExpr.__repr__  s.    t**%AAAA49AAAAr   c                 *    |                                  S rp   )rP   r   s    r   __str__zExpr.__str__  s    }}r   c                 l   | j         t          j        t          j        fv ri| j        d         dk     rt
          j        nt
          j        }t          | j        d                   | j        d         dk    rd| j        d          ndz   }n| j         t          j	        u r<d
                    fd| j        D                       }d|z   d	z   }t
          j        }nC| j         t          j        u r"t
          j        }t          | j                  }n| j         t          j        u r?| j        d         }| j        d         dk    r| j        d         dz   |z   }t
          j        }n| j         t          j        u r<d
                    fd
| j        D                       }d|z   dz   }t
          j        }nm| j         t          j        u r)g }t          | j                                                  D ]\  }}|dk     rd}| }nd}|dk    r"|                    t
          j                  }nJ|t%          d          k    rt          |          }n'| d|                    t
          j                  z   }|r|                    |           n|dk    r|                    d           |                    |           d
                    |          pd}|rt
          j        nt
          j        }n0| j         t          j        u rg }	g }
t          | j                                                  D ]G\  }}d}|dk    r"|                    t
          j                  }nt,          j        u r|t1          dd          v r;|                    t
          j                  }d
                    |g|z            }n|t1          dd          v r,|                    t
          j                  }|
|g| z  z  }
|                    t
          j                  }d| d| d	}n'|                    t
          j                  d| z   }|	r|	                    |           |	                    |           I|
r$|	s|	dgz  }	|	ddd
                    |
          d	gz  }	d
                    |	          pd}|	rt
          j        nt
          j        }nP| j         t          j        u r| j        \  }}}|t8          j        u r4t,          j        u r&fd|D             \  }}| d| }t
          j        }nfd|D             }|d |                                D             z  }| dd
                    |           d	}t
          j        }n| j         t          j        u rQ| j        d         }fd| j        dd         D             }| dd
                    |           d}t
          j        }n4| j         t          j        u r6fd | j        D             }d!
                    |          }t
          j        }n| j         t          j         u rfd"| j        D             \  }}}t,          j        u rd| d#| d$| d	}nPt,          j!        u rd| d%| d&| d	}n5t,          j"        u rd'| d| d| d	}ntG          d(| j          d)           t
          j        }nH| j         t          j$        u r6d*| j                            t
          j%                  z   }t
          j%        }n| j         t          j&        u r6d+| j                            t
          j%                  z   }t
          j%        }n| j         t          j'        u r| j        \  }}}|tP          j)        tP          j*        fv rt
          j)        nt
          j+        }|                    |          }|                    |          }|                              }| d,| d,| }ntG          d-| j                    |j,        |j,        k     rd|z   d	z   S |S ).z0Return a string representation of Expr.
        r   r   r2   _ r   c              3   Z   K   | ]%}|                     t          j                   V  &dS r   NrP   ra   rm   r   r   rK   s     r   r   z Expr.tostring.<locals>.<genexpr>  J       1 1" --
(88-LL 1 1 1 1 1 1r   r   r   c              3   Z   K   | ]%}|                     t          j                   V  &dS r   r   r   s     r   r   z Expr.tostring.<locals>.<genexpr>+  r   r   []z -  + r    * -0r	   r   izpow(z ** 1/c                 R    g | ]#}|                     t          j                   $S r   rP   ra   rh   r   argrK   s     r   
<listcomp>z!Expr.tostring.<locals>.<listcomp>k  sF      1  1  1$' !$Z-?6> !- !@ !@  1  1  1r   z / c                 R    g | ]#}|                     t          j                   $S r   r   r   s     r   r   z!Expr.tostring.<locals>.<listcomp>q  s<     ) ) ) Z%5II ) ) )r   c                 ^    g | ]*\  }}|d z   |                     t          j                  z   +S )=)rP   ra   rn   r   rs   rt   s      r   r   z!Expr.tostring.<locals>.<listcomp>s  sC     5 5 5!Q S1::jo#>#>> 5 5 5r   c                 R    g | ]#}|                     t          j                   $S r   r   r   s     r   r   z!Expr.tostring.<locals>.<listcomp>y  s<     . . . LL!1HLEE . . .r   Nc                 R    g | ]#}|                     t          j                   $S r   r   r   s     r   r   z!Expr.tostring.<locals>.<listcomp>~  s<     * * * LL!3hLGG * * *r   z // c                 R    g | ]#}|                     t          j                   $S r   r   )r   arK   s     r   r   z!Expr.tostring.<locals>.<listcomp>  sF     "6 "6 "6&' #$**Z-=6> #- #@ #@ "6 "6 "6r   ?: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   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numerdenomcondexpr1expr2ropleftrights     `                      r   rP   zExpr.tostring  s	    7rz27+++,0IaL1,<,<*..) DIaL!!(,	!(9(9 &81%7%7%7?ACAAW
""		 1 1 1 1&*i1 1 1 1 1Aa#A#JJW	!!#JDIAAW	!!	!Ay|q  IaL3&*#JJW  		 1 1 1 1&*i1 1 1 1 1Aa#A#JJW  E%dioo&7&788 # #e199B"FEEBA::==(=KKDDy||++"5zz"'}}}t}}&. 0= 0C 0C  C &LL$$$$5[[LL%%%T""""%#A+0EjoJJW
""GD#DIOO$5$566 ' '	c!88!]]:+=4< + > >FF++eArll**!%z/A8@ "/ "B "B!&VHsN!;!;c1--!%z/A8@ "/ "B "BC4/ !%z/?8@ "/ "B "B!8!8!8#!8!8!8!]]:+;4< + > >@LsMF 'NN2&&&v&&&& = %u$GCejj&6&6<<  'CA/6K++JOJJW  !%D$w{""x8:'='= 1  1  1  1+/ 1  1  1u (((('/

) ) ) )#') ) ) 5 5%+\\^^5 5 5 500diioo000'_

W##9Q<D. . . .#y}. . .D,,$))D//,,,A#JJW	!!* * * *#y* * *DD!!A#+JJW
"""6 "6 "6 "6+/9"6 "6 "6D% 8:%%///u//u///X_,,777477u777X---6U66e66t666)<DG<<(<<> > >#JJWdi(()9H(MMMA#)JJW  di(()9H(MMMA#)JJW%%#yCu+.58UX2F+F+F*--)} ==h=??DNN:NAAE,,,11C''#''''AA%&B&B&BCCC"Z%555 7S= r   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                    rg| 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             S | j        t          j        u rkt          | j        t          | j                            }|j                                        D ]\  }}t          |j        ||           t!          |          S | j        t          j
        u r1|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 r2|j        t          j        u r| t#          || j        d                   z   S | j        t          j        u r2|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"" 	4w%(""7rz27333$	!uz!}4DIaL%*Q-88: : : 7bj((!YFB"ZFB%b2grBw7777bh&&TWd49oo66A %
 0 0 2 2 1 11"161a0000$Q<<'w"*$$bj"'5J)J)Jj////RZ111eh"*6L6L!$''%//BG##BJ(>(>ge$)A,?????BJ&&58rw+>+>t%*Q-8885@@D>>HUOO33r   c                 ^    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                 ^    t          |t                    rt          |          | z
  S t          S rp   r  r   s     r   __rsub__zExpr.__rsub__  r  r   c                    t          |          }t          |t                    rN| 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 r6| j        \  }}|j        \  }}t          ||z  ||z  z
  ||z  ||z  z             S | j        t          j        u rkt          | j        t          | j                            }|j                                        D ]\  }}t          |j        ||           t!          |          S | j        t          j        u r~t          | j        i           }| j                                        D ]@\  }	}
|j                                        D ]!\  }}t          |j        |	|z  |
|z             "At!          |          S | j        t          j
        u r1|j        t          j        t          j        fv r| t          |          z  S |j        t          j
        u r1| j        t          j        t          j        fv rt          |           |z  S | j        t          j        u r2|j        t          j        u r| t%          || j        d                   z  S | j        t          j        u r2|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"" $	8w%(""7rz27333$TYq\EJqM%A%(1uz!}%E%EG G GW
**!YFB"ZFB%b2gR&7b279JKKK7bj((TWd49oo66A %
 0 0 2 2 1 11"161a0000$Q<<'W((TWb))A"&)//"3"3 A AB&+j&6&6&8&8 A AFB&qvrBwR@@@@A$Q<<'w"*$$bj"'5J)J)Jj////RZ''DG
BG7L,L,L!$''%//BG##BJ(>(>ge$)A,?????BJ&&58rw+>+>t%*Q-8885@@w"(""huoo--RX%%~~--d##j&7&777r   c                 ^    t          |t                    rt          |          | z  S t          S rp   r  r   s     r   __rmul__zExpr.__rmul__  r  r   c                 F   t          |          }t          |t                    r|j        t          j        u r|j        d         }|dk    rt          d          S |dk    r| S |dk    rn| j        t          j        u rPt          | j        i           }| j        	                                D ]\  }}||z  |j        |<   t          |          S | | |dz
  z  z  S |dk    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"" 	6x2:%% :a=q==$Q<<'q==Ka<<w"*,, "--$(IOO$5$5 5 5DAq()HAF1II(||+4HqL#9::^^ hY/B66BJx(8999GKu5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__  sD    eT"" 	A Xgk4??@@@r   c                 b    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__(  sE    eT"" 	= T")dE];;<<<r   c                 b    t          |          }t          |t                    r|| z  S t          S rp   r  r   s     r   __rfloordiv__zExpr.__rfloordiv__0  s/    eT"" 	!D= r   c           	          t          | gt          t          |          R i t          d |                                D                       S )Nc              3   >   K   | ]\  }}|t          |          fV  d S rp   r   r   s      r   r   z Expr.__call__.<locals>.<genexpr>=  s0      JJ41a71::JJJJJJr   )r  mapr   r   r   )rO   r   r   s      r   __call__zExpr.__call__6  sa      Ls7D11 L L LJJ6<<>>JJJJJL L 	Lr   c                     t          |          }t          |t                    s|f}t          |          dk    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__?  si     %'' 	FEu::>>LELLLMMMBK$5111r   c           	      	   | j         t          j        u rs                    |           }|| S t	          j        d| j                  }|r<|                                \  }}|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 r3t          | 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 ryd}| j                                        D ];\  }}||                              |z  } ||                              |z  z  }<|t+          d           t-          d          S |S | j         t          j        u ryd}| j                                        D ];\  }	}
||	                              |
z  } ||	                              |
z  z  }<|t+          d	           t-          d
          S |S | j         t          j        u r| j        \  }}}t3          |t                    r|                              }t          fd|D                       }t5          fd|                                D                       }t#          t          | j         |||f                    S | j         t          j        u r| j        d         }t3          |t                    r|                              }t          fd| j        d
d         D                       }t#          t          | j         |f|z                       S | j         t          j        u rBt          fd| j        D                       }t#          t          | j         |                    S | j         t          j        t          j        fv r:t#          t          | j         | j                                                          S | j         t          j        u rZ| 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   B   K   | ]}|                               V  d S rp   
substituter   r   symbols_maps     r   r   z"Expr.substitute.<locals>.<genexpr>]  sC       '> '>+/ (,{'C'C '> '> '> '> '> '>r   c              3   B   K   | ]}|                               V  d S rp   r1  r3  s     r   r   z"Expr.substitute.<locals>.<genexpr>`  sK       1H 1H59 261M1M 1H 1H 1H 1H 1H 1Hr   z?substitute: empty TERMS expression interpreted as int-literal 0r   zAsubstitute: empty FACTORS expression interpreted as int-literal 1r   c              3   B   K   | ]}|                               V  d S rp   r1  r   r   r4  s     r   r   z"Expr.substitute.<locals>.<genexpr>~  s/      AAqk22AAAAAAr   c              3   L   K   | ]\  }}||                               fV  d S rp   r1  )r   rs   rt   r4  s      r   r   z"Expr.substitute.<locals>.<genexpr>  sL       6 6"a all;778 6 6 6 6 6 6r   c              3   B   K   | ]}|                               V  d S rp   r1  r7  s     r   r   z"Expr.substitute.<locals>.<genexpr>  s/      JJqk22JJJJJJr   c              3   B   K   | ]}|                               V  d S rp   r1  r7  s     r   r   z"Expr.substitute.<locals>.<genexpr>  s/      JJ1Q\\+66JJJJJJr   zsubstitute method for z: )!r   r   r%   rq   rematchr   groupsas_arrayr    r!   r#   r$   r"   r   r   r)   r   r+   r   r2  r~   r   r,   r'   r   r   r(   r&   r-   r.   r*   r   )rO   r4  r   mr   parenr   r   r   r   r  targetr   r   funcoperandsr   r   r   s    `                 r   r2  zExpr.substituteI  s   
 7biOOD))E}@$)LLA 8 xxzzu222#E??*'''%'''L7rz27BI666K7rx,,, '> '> '> '>379'> '> '> "> "> ? ? ?7biT$'5 1H 1H 1H 1H=AY1H 1H 1H ,H ,H I I J J J7bhA#y00 > >e944u<AA55==AAy ' ( ( ( ||#H7bj  A"&)//"3"3 B Bh944@AA55AAAAy * + + + ||#H7bh#'9 FD&&$'' 8**;77AAAADAAAAAD 6 6 6 6&,llnn6 6 6 6 6FT$'FD&+ABBCCC7bk!!9Q<D$%% 4{33JJJJDIabbMJJJJJDT$'D7T>::;;;7bj  JJJJ	JJJJJHT$'8445557rvrx(((T$'49+?+?+L+LMMNNN7bm###yCu??;//D$$[11ET$'Cu+=>>???!"N47"N"Nd"N"NOOOr   c           
      R    | gR 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 rBt          t          | j         t          fd| j        D                                           S | j         t          j        t          j        fv ri }| j                                        D ]R\  }} |j        gR i }t%          |t                    r |j        gR i n|}||v r||         |z   }|||<   St          t          | j         |                    S | j         t          j        u r| j        d         }t%          |t                    r |j        gR i n|}	t          fd| j        d         D                       }
t)          fd| j        d                                         D                       }t          t          | j         |	|
|f                    S | j         t          j        u r| j        d         }t%          |t                    r |j        gR i n|}t          fd| j        dd         D                       }t          t          | j         |f|z                       S | j         t          j        t          j        fv r6t          t          | j          | j        j        gR i                     S | j         t          j        u rR| j        \  }}} |j        gR i } |j        gR 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   :   K   | ]} |j         gR i V  d S rp   traverse)r   r   r   r   visits     r   r   z Expr.traverse.<locals>.<genexpr>  sS       1' 1' e5d555f551' 1' 1' 1' 1' 1'r   r   c              3   :   K   | ]} |j         gR i V  d S rp   rF  )r   operandr   r   rH  s     r   r   z Expr.traverse.<locals>.<genexpr>  sT       : :!( .W-eEdEEEfEE : : : : : :r   r   c              3   D   K   | ]\  }}| |j         gR i fV  d S rp   rF  )r   rs   rt   r   r   rH  s      r   r   z Expr.traverse.<locals>.<genexpr>  sd       @ @"&!Q  !*!*U"DT"D"D"DV"D"DE @ @ @ @ @ @r   r	   c              3   :   K   | ]} |j         gR i V  d S rp   rF  )r   r)  r   r   rH  s     r   r   z Expr.traverse.<locals>.<genexpr>  sS       8 8 % +EN5B4BBB6BB 8 8 8 8 8 8r   ztraverse method for )r   r   r    r!   r#   r%   r"   r$   r)   r&   r   r   r   r   r+   r,   r   rG  r   r'   r   r(   r-   r.   r*   r   )rO   rH  r   r   resultr   rs   rt   objrB  rC  
kwoperandsindicesr   r   r   s    ```            r   rG  zExpr.traverse  ss    t-d---f--M7rz27BIryAAAKWRXry"*EEET$'5 1' 1' 1' 1' 1' 1' I1' 1' 1' ,' ,' ( ( ) ) ) W2:...D	))  1AJu6t666v66"1d++3ZQZ777777712 99Q!AQT$'400111W  )A,C!#t,,6LCL888888825  : : : : : :,0IaL: : : : :H @ @ @ @ @ @*.)A,*<*<*>*>@ @ @ @ @JT$'D(J+GHHIIIW##)A,C d++5<3<777777714  8 8 8 8 8 8)-1228 8 8 8 8GT$'C6G+;<<===W***T$'"4$)"4U"LT"L"L"LV"L"LN N O O OW%%#yCu 4=888888D"EN5:4:::6::ET$'Cu+=>>???!"B"B"BCCCr   c                 f    g }|ffd	}|                      |           t          |          dk    S )z&Check if self contains other.
        c                 J    |r| S | k    r|                     d           | S d S )Nr   )r   )exprfoundr   s     r   rH  zExpr.contains.<locals>.visit  s4     Q r   r   )rG  r   )rO   r   rT  rH  s    `  r   containszExpr.contains  sO     # 	 	 	 	 	 	 	e5zzQr   c                 V    t                      }|fd}|                     |           |S )z3Return a set of symbols contained in self.
        c                 Z    | j         t          j        u r|                    |            d S d S rp   )r   r   r%   add)rS  rT  s     r   rH  zExpr.symbols.<locals>.visit  s,    w")##		$ $#r   setrG  rO   rT  rH  s      r   symbolszExpr.symbols  s=     # 	  	  	  	  	er   c                 \    t                      }|ffd	|                                |S )zFReturn a set of expressions used as atoms in polynomial self.
        c                 L   | j         t          j        u r!| j        D ]}|                               | S | j         t          j        t          j        fv rd S | j         t          j        u rct          | j        d         t                    rC| j        d         t          j
        u r(| j        d         d                                        | S d S | j         t          j        t          j        fv r| S |                    |            | j         t          j        t          j        fv r| S d S )Nr   r   )r   r   r,   r   rG  r+   r"   r'   r   rS   r[   r    r!   rX  r(   )rS  rT  brH  s      r   rH  z$Expr.polynomial_atoms.<locals>.visit  s   w"*$$ & &AJJu%%%%w28RZ000w"(""z$)A,'H'H"9Q<7;..IaLO,,U333Kw2:rw///IIdOOOw2;111 21r   rY  r[  s     @r   polynomial_atomszExpr.polynomial_atoms  sH     # 	 	 	 	 	 	( 	er   c                 6   |                      |t          d          i          }| |z
  }|                     |t          d          i          }t          ||z  |z
            \  }}|t          d          k    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 == )r2  r   as_numer_denomRuntimeError)rO   symbolr_  axr   zeror   s          r   linear_solvezExpr.linear_solve  s    
 OOVYq\\233AXMM69Q<<011 Vb11a9Q<<  B  B  B#$ B  B)/ B  B45 B  B;? B  B C 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*  r2  rG  rU  r\  r`  rg  r   r   r   r   r      s2        
 "* 0 0 0 \0
@ @ @D- - -
% % %   BAA777666B B B   *4"*P P P Pd      8  
    
' ' 'R  
  .        L L L2 2 2IP IP IPV6D 6D 6Dp       :    r   c           	      z   t          | t                    s| S | j        t          j        u ri }| j                                        D ]\  }}|dk    r|j        t          j        u r|dk    r||z  }d}|j        t          j        u r4|j                                        D ]\  }}t          ||||z             st          |||           t          |          dk    rt          d          S t          |          dk    r!|                                \  \  }}|dk    r|S t          t          j        |          S | j        t          j        u rVd}i }| j                                        D ]1\  }}|dk    r|j        t          j        u r(t          |t                    r|dk    r|||dz
  z  z  }d}|j        t          j        t          j        fv rC|dk    r||j        d         z  }~|dk    r||j        d         |z  z  }t          |||           |j        t          j        u rc|dk    rJt          |t                    r5|j                                        D ]\  }	}
t          ||	|
|z             t          |||            t          |||           3t          |          dk    s|dk    r&t          |t                    sJ t          |          S t          |          dk    r`|                                \  \  }}|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                    r0t          |t                    rt)          ||          }||z  ||z  }}n||z  d}}|j        t          j        u rc|j        d         t"          j        u rJ|j        d         d         |z  }|j        d         d         |z  |z  }t+          t"          j        ||          S |j        t          j        u rc|j        d         t"          j        u rJ|j        d         d         |z  |z  }|j        d         d         |z  }t+          t"          j        ||          S t-          t/          |          j                  }t/          |          j                                        D ]\  }}t          |||            i i }}|                                D ]\  }}|dk    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          j        u rE| j        d         g}| j        dd         D ]}|d         }|j        t          j        u r|j        t          j        u r|j        d         d         dv r|j        d         d         |j        d         d         k    rct7          |j        d         dd         |j        d         dd         z   t9          |j        d         |j        d                             }||d<   |                    |           t          |          dk    r|d         S t          t          j        t=          |                    S | j        t          j        u r_tA          t0          | j                  \  }}}|j        t          j        u r|j        d         r|n|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%  )rN  rr   tru   r  r  r   r_  eb1e1dividenddivisorr  r  gr   r   lstrJ   lastnew_lastr   r   r   s                            r   r   r     s    c4   

vHNN$$ 
	$ 
	$DAqAvvtrz!!a1ffEtrxfllnn . .FBq"b1f----. 1a####q66Q;;Q<<VVq[[ggiiGFQAvvBHa   
vHNN$$ 	$ 	$DAqAvvtrxJq-$@$@QUUq1u&t
BG,,,66QVAY&EEUUQVAY!^+EEq!Q''''##q55Z=995"#&,,.. 2 2B"1b"q&11112 q!Q''''1a####q66Q;;%1**e\22222U###VVq[[ggiiGFQAvvQ''zz1e*---aZZ
A&&&4
A#6#6">???
vchqkW[88HQK'x((Bw''Bb-(( 	ZM-J-J 	BAUBEBBUAB5BHw{!:!:GAJqMB&EGAJqMB&+EGK6665BHw{!:!:GAJqMB&+EGAJqMB&EGK666B$%%rNN'--// 	! 	!DAqq!aR    2uGGII 	 	DAq1uua2a$rz51122R7$rz51122R78
BG,,,A!1C1CLUE222
vx{m!"" 	 	Ar7DGry((	))	!Q500q	!	!R(888$TYq\#2#%6122%F%(1qvay%A%AC C"B

1s88q==q6MBIuSzz***
v CH55eU7bj   IaL355e3BJue 4555Jr   c                 |   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   rl  reprr   r%  r   rN  s    r   r   r     s     #w .#(CH---#|$$ ~~#s $ c####u (S#&&'''Jr   c                 6    t          t          j        |           S )zJReturn object as SYMBOL expression (variable or unparsed expression).
    )r   r   r%   r|  s    r   	as_symbolr~    s     	3r   r2   c                 X   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]   rN  r   s     r   r   r     s     #s -BJd,,,#u *BGc4[)))#t 6bj"'***J
ECEEE
F
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    sl     #s -BJd,,,#t 6RZJ
=C===
>
>>r   c                    t          | t                    r)t          t          j        t          |           |f          S t          | t
                    rt          t          j        | |f          S t          | t                    r\| j        t          j        u r| S | j        t          j        u r4t          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 1BGeCjj$/000#u *BGc4[)))#t =6RWJVrz!!%"4"4d!;<<<
:C:::
;
;;r   r   c                 :    t          t          j        | |f          S )zBReturn object as STRING expression (string literal constant).
    )r   r   r#   r  s     r   rl  rl    s     	C;'''r   c                 f    t          | t                    r| f} t          t          j        |           S )z8Return object as ARRAY expression (array constant).
    )r   r   r   r$   r|  s    r   r>  r>    s/     #t d#r   c                 n    t          t          j        t          |           t          |          f          S )zDReturn object as COMPLEX expression (complex literal constant).
    )r   r   r"   r   )ry  rz  s     r   r   r     s'     
WT]]GDMM:;;;r   c           
          t          t          j        | t          t	          t
          |                    t          d |                                D                       f          S )zIReturn object as APPLY expression (function call, constructor, etc.)
    c              3   >   K   | ]\  }}|t          |          fV  d S rp   r$  r   s      r   r   zas_apply.<locals>.<genexpr>  s0      AA$!Qq'!**oAAAAAAr   )r   r   r'   r   r%  r   r   r   )rB  r   r   s      r   r  r    s\     uS$//00AA&,,..AAAAACD 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11r   c                 6    t          t          j        |           S )z-Return object as referencing expression.
    )r   r   r-   rS  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                 P    t          t          j        t          j        | |f          S rp   )r   r   r*   r0   rB   r   r   s     r   as_eqr        $6777r   c                 P    t          t          j        t          j        | |f          S rp   )r   r   r*   r0   rC   r  s     r   as_ner    r  r   c                 P    t          t          j        t          j        | |f          S rp   )r   r   r*   r0   rD   r  s     r   as_ltr    r  r   c                 P    t          t          j        t          j        | |f          S rp   )r   r   r*   r0   rE   r  s     r   as_ler    r  r   c                 P    t          t          j        t          j        | |f          S rp   )r   r   r*   r0   rF   r  s     r   as_gtr    r  r   c                 P    t          t          j        t          j        | |f          S rp   )r   r   r*   r0   rG   r  s     r   as_ger    r  r   c                 8   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   r|  s    r   r   r   #  s     #t (nn6RXJ6RZ:a!#=#=sx{"KLLL6RW71chqk#:#:CHQK"HIIIBHsAh'''
=DII===
>
>>r   c                 "   t          | t                    rZt          |           } | j        t          j        u r| S | j        t          j        u rt          | j                  dk    rv| j        	                                \  \  }}|dk    rt          t          j        |di          S t          t          j        |dt          
                    |          di          S | j        t          j        u rf| 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   )rN  r   r   s      r   r  r  2  sI    #t *nn6RZJ6RX38}}!!!$!1!1uA::
T1I666BJq$++e2D2Da(HIIIFbh!++Xa[ ,
SXa[^QA$KLLLBJa)))
=DII===
>
>>r   c                    t          | t                    rSt          |           } | 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                                        \  \  }}||fS | j        t          j        u rj| j        d         t          j        u rQt!          | 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   rk  r  r]   r   )rN  r   r   rm  ru   s        r   rk  rk  G  sL    #t nn6RZa!--sx{::6RW1chqk**CHQK776RX38}}!!!$!1!1uU{"6RX#(1+"<"< !Q00DAqGKCHQKN;;Q>>Av
ADIIAAA
B
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 r|| j        d         t          j        u rR| j        d         sEt!          t"          | j        d                   \  }}|d         |d         z  |d         |d         z  fS | t          d          fS | j        t          j        u r#g g }}| j                                        D ]F\  }}t#          |          \  }}||z  }|                    |           |                    |           Gt          d          t          d          }}t+          t-          |                    D ]J}	||	         }t+          t-          |                    D ]}
|	|
k    r|||
         z  }||z  }|||	         z  }K|j        t          j        t          j        fv r|j        d         dk     r| | }}||fS | j        t          j        u rt          d          t          d          }}| j                                        D ]F\  }}t#          |          \  }}|dk    r|||z  z  }|||z  z  }.|dk     r||| z  z  }||| z  z  }G||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%  rb  r+   r   r   r   r   r,   r]   r   )rN  numersdenomsr   r   nrr   r   r   ijr_  rn  bnumerbdenoms                  r   rb  rb  \  s    #t & nn6bj"'2:ryk2:/ / /	!$$Vrxx{gk))#(1+)!$^SXa[!A!Aay6!9,fQi&).CCC	!$$VrxFF"x~~// ! !e%d++1Ia   a    $Q<<15E3v;;'' # #1Is6{{++ ' 'AAvvVAY
"xBJ000UZ]Q5F5F %vvu%<Vrz!!$Q<<15E(( , ,1!/!2!2q55Vq[(EVq[(EEUUV^+EV^+E%<
BDIIBBB
C
CCr   c               #       K   d} 	 | dz  } | V  
)Nr   Tr   r   )counters    r   _counterr    s'      G1r   c                     i fd}t          j        d                    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                     |                                  d d         \  }}|r
|d d         }ddd|d                  }| d| dt                                           d	}||<   |S )
Nr	   r   SINGLEDOUBLE)'"r   z@__f2py_QUOTES_r   @)r=  COUNTER__next__)r?  r   r   prs   rr   s        r   replzeliminate_quotes.<locals>.repl  s    hhjj!ne 	9D**584==A==(8(8(:(:===!r   z+({kind}_|)({single_quoted}|{double_quoted})z
\w[\w\d_]*z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))r   single_quoteddouble_quotedr  r  )r;  subformat)rJ   r  new_srr   s      @r   eliminate_quotesr    s    
 	A     FAHH,, I . . 	a	 E ee!8Or   c                     |                                 D ]B\  }}|d|                    d                   }|r|dz  }|                     |||z             } C| S )z!Inverse of eliminate_quotes.
    Nr  r   )r   findreplace)rJ   rr   rs   rt   r   s        r   insert_quotesr    se     		 # #1!&&++ 	CKDIIa""Hr   c                    d\  }}t          |           }dD ]-\  }}|                     |          }|dk    r!||k     r|}||}}.|| i fS |}|                     ||          }|                     ||dz   |          |                     ||dz   |          k    rm|                     ||dz             }|dk    rt          d||z    d|           |                     ||dz   |          |                     ||dz   |          k    mdd	d
dd|         }d| dt                                           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%q66D  	( 	(v FF5MM77t88D%D|"uA	uaA
''$Aq
!
!QWWUAE1%=%=
=
=FF5!a%  77MDJMMMMNNN ''$Aq
!
!QWWUAE1%=%=
=
=
 H7*EEdKA8q887#3#3#5#5888A	!CII+a-Aq3u::/00DAqAaDRaR519q=!r   c                 v    |                      d          s
J |             |                     d          d         S )Nr  r   r2   )
startswithsplit)rJ   s    r   _get_parenthesis_kindr    s7    <<.//22222773<<?r   c                     |                                 D ]b\  }}t          |          }t          dddd          |         }t          dddd	          |         }|                     |||z   |z             } c| 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    s     		 + +1!!$$#ctDDDQG3s#EEEaHIIaE)**Hr   c                     t          |                              |           }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     s[     	8,,,22155A!T 
IIIQIII
J
JJr   c                        e Zd Zd Zd Zd ZdS )_Pairc                 "    || _         || _        d S rp   r  )rO   r   r   s      r   r   z_Pair.__init__  s    	


r   c                     | j         | j        }}t          |t                    r|                    |          }t          |t                    r|                    |          }t          ||          S rp   )r   r   r   r   r2  r  )rO   r4  r   r   s       r   r2  z_Pair.substitute
  sg    iedD!! 	0??;//DeT"" 	2$$[11ET5!!!r   c                 P    t          |           j         d| j         d| j         dS r   )r   r
   r   r   r   s    r   r   z_Pair.__repr__  s.    t**%BB	BBTZBBBBr   N)r
   r   r   r   r2  r   r   r   r   r  r    sF          " " "C C C C Cr   r  c                   6    e Zd Zej        fdZd Zd ZddZdS )r  c                 0    d | _         d | _        || _        d S 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00r   c                 h    || _         t          |          \  }| _        |                     |          S rp   )r  r  r  process)rO   inpunquoteds      r   r   z_FromStringWorker.parse   s/    $4S$9$9!$/||H%%%r   rS  c           	          t          |t          t          f          r% t          |           fd|D                       S t          |t                    sJ t          |          |f            t          |          \  }|                                }fdd|v r |                    d                    }dk    r"t                               |                    S dk    r/t          |          dk    rt                               |           S t          d d|           t          j        d	|          }|rdk    s
J              |                                          \  }}}                     |          }                     |          }                     |          }t          |||          S  j        t"          j        u r!t          j        d
|t          j                  }nt          j        d|          }|r|                                \  }	}
} j        t"          j        u rd|
z   dz   }
                      |	|f                    \  }	}t(                              |
 j                  }
t-          t.          j        |
|	|f          S t          j        d|          }|rE|                                \  }} |          }t3          |                     |                    S t          j        d|          }t          |          dk    r                      |d         pd                    }t5          |ddd         |ddd                   D ]P\  }}                      |                    }|                                }|dk    r||z  }C|dk    sJ ||z  }Q|S  j        t"          j        u r\d|v rX |                    d                    }t-          t.          j        t                               |                              S t          j        d j        t"          j        u r|n|                    dd                    }t          |          dk    r |          } j        t"          j        urd |D             }                     |d                   }t5          |ddd         |ddd                   D ]G\  }}                     |          }|                                }|dk    r||z  }:|dk    sJ ||z  }H|S |                    d          s|                    d          r[t.          j        t.          j         d|d                  }                      |dd                             }t-          ||          S  j        t"          j        urd|v r|t          tC           |                    d                                        }                     |d                   }|dd         D ]}                     |          }||z  }|S t          j        d"                    d d!"          |          }|r\|                                \  }}}|r#|#                                rtI          |          }tK          tI          |          |pd#          S t          j        d$"                    d%d&d!'          |          }|r|                                \  }}}}|r#|#                                rtI          |          }|&                                }d(|v r3tO          tQ          |                    d(d)                    |pd*          S tO          tQ          |          |pd#          S | j)        v r:|d|*                    d+                   }tW           j)        |         |pd          S |v rtY          |          }                      |                   |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|                                \  }}}                      |                    }                      |          dd/         d          }t          |t                    s|f}|d,k    rBt]          d0 |D                       }t          d1 |D                       }t_          |g|R i |S |d2k    sJ ||         S t          j        d3|          }|rta          |          S  1                     |                    }te          d4|d5 j3         d6           ta          |          S )7a  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   D   K   | ]}                     |          V  d S rp   )r  )r   s_contextrO   s     r   r   z,_FromStringWorker.process.<locals>.<genexpr>0  s1      AA4<<G44AAAAAAr   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  sG    !dE]++ 0tAwws7A///(O<<<r   ,r   rS  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*([*]|/)**@__f2py_DOUBLE_STAR@c                 :    g | ]}|                     d d          S )r  r  )r  )r   rJ  s     r   r   z-_FromStringWorker.process.<locals>.<listcomp>  s7     5 5 5 ' $OO,BDII 5 5 5r   r   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   rn     r  r/  r,  z4\A(.+)\s*(@__f2py_PARENTHESIS_(ROUND|SQUARE)_\d+@)\Zr   c              3   \   K   | ]'}t          |t                    |j        |j        fV  (d S rp   )r   r  r   r   r   r   s     r   r   z,_FromStringWorker.process.<locals>.<genexpr>  sM       7 7A!+Au!5!57qvqw/ 7 7 7 7 7 7r   c              3   D   K   | ]}t          |t                    |V  d S rp   )r   r  r  s     r   r   z,_FromStringWorker.process.<locals>.<genexpr>  s1      II1Jq%4H4HIQIIIIIIr   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   r;  r<  r=  r  rK   r   r   Ir0   rL   r   r   r*   r  zipr)   r   r  r  r.   r-   reversedr  isdigitr   r  rH   r   r   r  r  rl  r  r>  r   r  r~  r  r~   r  )rO   rJ   r  r   rC  r?  operr   r   r   r   r   keynamer   rM  r   rJ  r   r   r@  r   rA  r   r   r  r  s   ` `                     @@r   r  z_FromStringWorker.process%  sX
    a$'' 	B477AAAAAqAAAAAA!S!!//DGGQ</// 133?GGII	= 	= 	= 	= 	= 	= !88wqwws||,,H&  T\\(33444&  x==A%%%t||H'='=>>%HHHQHHJ J J H4a88 	2f$$$g$$$!(!4!4D%<<%%DLL''ELL''EdE5111 =H,,,>24I IAA JAO OA 	; xxzzD#u} 000Ci#o,,wwe}'='=>>KD%""3"??CT5'9::: H2A66 	7XXZZNGUGENNE$,,u"5"5666 82A66x==1\\''(1+*<"="=>>F"8ADqD>8ADqD>BB & &G,,www'7'788XXZZ99g%FF9999g%FFM =H,,,wqwwt}}--H	dll844557 7 7 86"&-8:"="=QQ"#))D2H"I"IL L x==1wx((H}HJ..5 5+35 5 5 \\(1+..F"8ADqD>8ADqD>BB & &G,,w//XXZZ99g%FF9999g%FFM << 	%S 1 1 	%xbf--ad3Bll771QRR5>>22GG$$$ =
**tqyyHWWQWWT]]%;%;<<==H\\(1+..F#ABB< + +,,w// F*M H5<<% = ' '()+ +  	5XXZZNE1d ! !4yyc%jj$)!444 HOf%8"32  4 4 67	8 8
  	4 !

E1a ! !4yyKKMMEe||uU]]3%<%<==tyqIII5<<333 \affSkk\?DT_Q/;;; )!,,ELL);!<!<+0G+;+;I IEeT** ! L...eT** %"HE& HL  	$"#((**FD%\\''&//22F<<ad 3V<<DdE** u 7 7 7 7 7 7 7IIIIIII8888888 ((((d|# H&** 	 Q<<   ,,NANNdmNNN	P 	P 	P||r   Nr  )	r
   r   r   r   r   r   r  r   r  r   r   r   r  r    se         (
 ! ! ! !
1 1 1& & &
H H H H H Hr   r  )r2   )r   )r   ):r   __all__r;  r{   enumr   mathr   r   r   r0   rS   	Exceptionr]   ra   r   rj  r   r  rv   UserWarningrx   r~   r   r   r   r~  r   r  r   rl  r>  r   r  r  r  r  r  r  r  r  r  r  r   r  rk  rb  r  r  r  r  r  r  r  r   rL   r  r  r   r   r   <module>r     sN   4 ( 
			             
 
 
 
 
t 
 
 
       *5 5 5 5 5D 5 5 5<
 
 
 
 
d 
 
 
	 	 	 	 	i 	 	 	       & U|
 
 
	 	 	 	 	+ 	 	 	6 6 6w	 w	 w	 w	 w	 w	 w	 w	tF F FR        
G 
G 
G 
G? ? ? ?< < < <( ( ( (  < < < <D D D2 2 2       8 8 88 8 88 8 88 8 88 8 88 8 8? ? ?? ? ?*C C C**D *D *DZ   (**  :  ( ( (V  
   $: 	K 	K 	K 	KC C C C C C C C&W W W W W W W W W Wr   