a
    !ñ»jÖ  ã                   @   sô  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„ deƒZG dd	„ d	eƒZ	G d
d„ deƒZ
G dd„ deƒZG dd„ deƒZG dd„ deƒZefZeefZdd„ ZG dd„ deƒZdd„ ZG dd„ dƒZdd„ Zdd„ Zdd„ Zd[d d!„Zd\d"d#„Zd]d$d%„Zd^d'd(„Zd)d*„ Zd_d+d,„Z d-d.„ Z!d/d0„ Z"d1d2„ Z#d3d4„ Z$d5d6„ Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*dAdB„ Z+dCdD„ Z,dEdF„ Z-dGdH„ Z.dIdJ„ Z/e/ƒ Z0dKdL„ Z1dMdN„ Z2dOdP„ Z3dQdR„ Z4dSdT„ Z5ej6fdUdV„Z7G dWdX„ dXƒZ8G dYdZ„ dZƒ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                   @   s   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© r   r   ú9E:\soccer\ml_env\Lib\site-packages\numpy/f2py/symbolic.pyr   $   s   r   c                   @   sL   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   -   s    r   c                   @   sH   e Zd ZdZdZdZdZdZdZdZ	e
ejfdd	„ƒZejfd
d„ZdS )ÚRelOpzH
    Used in Op.RELATIONAL expression to specify the function part.
    r   r   é   é   é   é   c                 C   sR   |t ju r0t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   r+   ÚEQÚNEÚLTÚLEÚGTÚGEÚlower)ÚclsÚsÚlanguager   r   r   Ú
fromstringM   s    
þþÿÿzRelOp.fromstringc                 C   sb   |t ju r6t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 )Nr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   )	r   r   r+   r<   r=   r>   r?   r@   rA   ©ÚselfrE   r   r   r   ÚtostringV   s    
þþþþzRelOp.tostringN)r   r	   r
   r   r<   r=   r>   r?   r@   rA   Úclassmethodr   r   rF   rI   r   r   r   r   r+   B   s   r+   c                   @   s,   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   r,   r-   r.   r/   é   N)r   r	   r
   r   ZPOSZNEGZADDZSUBZMULÚDIVÚPOWr   r   r   r   rK   `   s   rK   c                   @   s   e Zd ZdS )ÚOpErrorN©r   r	   r
   r   r   r   r   rO   m   s   rO   c                   @   sD   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   r,   r-   r/   rL   é   r   é   é   r   r   N)r   r	   r
   r   ÚATOMÚPOWERÚUNARYÚPRODUCTÚSUMr>   r<   ZLANDZLORr"   ZASSIGNÚTUPLEÚNONEr   r   r   r   rQ   q   s   rQ   c                 C   s<   |   |¡}|d u r|| |< n|| }|r2|| |< n| |= d S ©N)Úget)ÚdÚkÚvÚcr   r   r   Ú
_pairs_addˆ   s    


rb   c                   @   s   e Zd ZdS )ÚExprWarningNrP   r   r   r   r   rc   •   s   rc   c                 C   s   t j| tdd� d S )Nr   )Ú
stacklevel)ÚwarningsÚwarnrc   )Úmessager   r   r   Úewarn™   s    rh   c                   @   s$  e Zd ZdZeejfdd„ƒZdd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejejfdd„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Z d0d1„ Z!d2d3„ Z"d4d5„ Z#d6d7„ Z$d8d9„ Z%d:d;„ Z&d<d=„ Z'd>d?„ Z(d@dA„ Z)dBS )Cr   zfRepresents a Fortran expression as a op-data pair.

    Expr instances are hashable and sortable.
    c                 C   s   t | |d�S )z.Parse a Fortran expression to a Expr.
        ©rE   )rF   )rD   rE   r   r   r   Úparse£   s    z
Expr.parsec                 C   s0  t |tƒsJ ‚|tju rbt |tƒr.t|ƒdks2J ‚t |d tƒsDJ ‚t |d ttfƒs^J |ƒ‚�n¾|tju r¶t |tƒr‚t|ƒdks†J ‚t |d tƒs˜J ‚t |d ttfƒs²J |ƒ‚�nj|tj	u rÞt |tƒrÖt|ƒdksÚJ ‚�nB|tj
u �r`t |tƒ�rt|ƒdk�sJ ‚t |d tƒ�r<|d d d t|d ƒd … dv �s@J ‚t |d ttfƒ�s J |ƒ‚�nÀ|tju �r‚t|ƒd u�s J ‚�nž|tjtjfv �rÄt |tƒ�s¤J ‚tdd„ |D ƒƒ�s J |ƒ‚�n\|tjtjfv �rêt |tƒ�s J ‚�n6|tju �rTt |tƒ�rt|ƒdk�sJ ‚t|d ƒd u�s*J ‚t |d tƒ�s>J ‚t |d tƒ�s J ‚nÌ|tju �r–t |tƒ�rzt|ƒdk�s~J ‚t|d ƒd u�s J ‚nŠ|tju �rÂt |tƒ�r¼t|ƒdk�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 ‚ntd|› �ƒ‚|| _|| _d S )	Nr   r   r   )z""z''z@@c                 s   s   | ]}t |tƒV  qd S r\   )Ú
isinstancer   ©Ú.0Úitemr   r   r   Ú	<genexpr>É   ó    z Expr.__init__.<locals>.<genexpr>r,   z$unknown op or missing sanity check: )rk   r   r   ÚtupleÚlenÚintÚstrr   Úfloatr   r   r!   Úhashr    r%   Úallr'   r(   Údictr#   r$   r"   r)   r*   r   r&   ÚNotImplementedErrorÚopÚdata)rH   rz   r{   r   r   r   Ú__init__©   sV    


 ÿ    ÿzExpr.__init__c                 C   s"   t |tƒo | j|ju o | j|jkS r\   )rk   r   rz   r{   ©rH   Úotherr   r   r   Ú__eq__ë   s
    

ÿ
þzExpr.__eq__c                 C   sl   | j tjtjfv r&tt| j ¡ ƒƒ}n8| j tju rX| jd d… tt| jd  ¡ ƒƒ }n| j}t	| j |fƒS ©Nr   )
rz   r   r'   r(   rq   Úsortedr{   Úitemsr#   rv   )rH   r{   r   r   r   Ú__hash__ð   s    &zExpr.__hash__c                 C   sÜ   t |tƒrØ| j|jur&| jj|jjk S | jtjtjfv r\t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€   )rk   r   rz   Úvaluer   r'   r(   rq   r�   r{   r‚   r#   ÚNotImplementedr}   r   r   r   Ú__lt__ù   s    
ÿÿzExpr.__lt__c                 C   s   | |kp| |k S r\   r   r}   r   r   r   Ú__le__  rp   zExpr.__le__c                 C   s
   | |k S r\   r   r}   r   r   r   Ú__gt__
  rp   zExpr.__gt__c                 C   s
   | |k  S r\   r   r}   r   r   r   Ú__ge__  rp   zExpr.__ge__c                 C   s    t | ƒj› d| j› d| j›d�S ©Nú(ú, ú))Útyper   rz   r{   ©rH   r   r   r   Ú__repr__  s    zExpr.__repr__c                 C   s   |   ¡ S r\   )rI   r�   r   r   r   Ú__str__  s    zExpr.__str__c                    sv  | j tjtjfv r`| jd dk r&tjntj}t| jd ƒ| jd dkrVd| jd › �nd }�nø| j tj	u rœd 
‡ fdd„| jD ƒ¡}d	| d
 }tj}�n¼| 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 | }tj}�n\| j tju �r:d 
‡ fdd„| jD ƒ¡}d| d }tj}�n| j tju �r$g }t| j ¡ ƒD ]¢\}}|dk �rxd}| }nd}|dk�r˜|jtjˆ d�}n2|tdƒk�r°t|ƒ}n|› d�|jtjˆ d� }|�rÜ| |¡ n|dk�rð| d¡ | |¡ �qZd 
|¡�pd}|�rtjntj}�n4| j tju �r’g }	g }
t| j ¡ ƒD ]ö\}}d}|dk�rp|jtjˆ d�}n²ˆ tju �r|tddƒv �r®|jtjˆ d�}d 
|g| ¡}nX|tddƒv �rä|jtjˆ d�}|
|g|  7 }
�qHn"|jtjˆ d�}d|› d|› d
�}n|jtjˆ d�d|› � }|	�r2|	 |¡ |	 |¡ �qH|
�rl|	�sV|	dg7 }	|	dd	d 
|
¡d
g7 }	d 
|	¡�pzd}|	�rˆtjntj}�nÆ| j tju �r8| j\}}}|tju �rðˆ tju �rð‡ fdd„|D ƒ\}}|› d|› �}tj}nD‡ fdd„|D ƒ}|dd„ | ¡ D ƒ7 }|› d	d 
|¡› d
�}tj}�n | j tju �rŒ| jd }‡ fd d„| jdd!… D ƒ}|› dd 
|¡› d�}tj}�nÌ| j tju �rÂ‡ fd"d„| jD ƒ}d# 
|¡}tj}�n–| j tj u �rz‡ fd$d„| jD ƒ\}}}ˆ tju �rd	|› d%|› d&|› d
�}nbˆ tj!u �r6d	|› d'|› d(|› d
�}n<ˆ tj"u �r\d)|› d|› d|› d
�}nt#d*| j › d+ˆ › �ƒ‚tj}nÞ| j tj$u �r¦d,| jjtj%ˆ d� }tj%}n²| j tj&u �rÒd-| jjtj%ˆ d� }tj%}n†| j tj'u �rH| j\}}}|t(j)t(j*fv �rtj)ntj+}|j|ˆ d�}|j|ˆ d�}|jˆ d�}|› d.|› d.|› �}nt#d/| j › �ƒ‚|j,|j,k �rrd	| d
 S |S )0z0Return a string representation of Expr.
        r   r   r-   Ú_Ú rŒ   c                 3   s   | ]}|j tjˆ d �V  qdS ©ri   N©rI   rQ   rZ   rl   ri   r   r   ro     s   ÿz Expr.tostring.<locals>.<genexpr>r‹   r�   c                 3   s   | ]}|j tjˆ d �V  qdS r”   r•   rl   ri   r   r   ro   +  s   ÿú[ú]z - ú + ri   ú * ú-Ú0r   r   iöÿÿÿzpow(z ** Ú1ú/c                    s   g | ]}|j tjˆ d �‘qS ©ri   ©rI   rQ   rX   ©rm   Úargri   r   r   Ú
<listcomp>k  s   þÿz!Expr.tostring.<locals>.<listcomp>z / c                    s   g | ]}|j tjˆ d �‘qS rž   r•   r    ri   r   r   r¢   q  s   ÿc                 S   s$   g | ]\}}|d  |  tj¡ ‘qS )ú=)rI   rQ   r[   ©rm   r_   r`   r   r   r   r¢   s  s   ÿc                    s   g | ]}|j tjˆ d �‘qS rž   r•   r    ri   r   r   r¢   y  s   ÿNc                    s   g | ]}|j tjˆ d �‘qS rž   rŸ   r    ri   r   r   r¢   ~  s   ÿz // c                    s   g | ]}|j tjˆ d �‘qS rž   r•   ©rm   Úari   r   r   r¢   ƒ  s   þÿú?ú:z if z else zmerge(ztostring for z and ú&Ú*ú ztostring for op )-rz   r   r   r   r{   rQ   rY   rU   rt   r   Újoinr!   r   r    r'   r�   r‚   rI   Ú	as_numberrX   Úappendr(   r   r   ÚrangerZ   rV   r#   rK   rM   r$   r%   r"   r   r   ry   r)   rW   r*   r&   r+   r<   r=   r>   r„   )rH   Zparent_precedencerE   Ú
precedenceÚrZtermsÚtermÚcoeffrz   ZfactorsÚtailÚbaseÚexpÚfactorÚnameÚargsÚkwargsÚnumerÚdenomÚcondÚexpr1Úexpr2ÚropÚleftÚrightr   ri   r   rI     s.   ÿÿÿÿ


ÿ



ÿ


ÿÿÿÿÿÿ


þ

ÿÿ


ÿ

ÿ


þÿÿzExpr.tostringc                 C   s   | S r\   r   r�   r   r   r   Ú__pos__¦  s    zExpr.__pos__c                 C   s   | d S )Néÿÿÿÿr   r�   r   r   r   Ú__neg__©  s    zExpr.__neg__c           	      C   s¬  t |ƒ}t|tƒ�r¨| j|ju rØ| jtjtjfv r^t| jd |jd  t	| jd |jd ƒƒS | jtj
u r�| j\}}|j\}}t|| || ƒS | jtju rØt| jt| jƒƒ}|j ¡ D ]\}}t|j||ƒ q¸t|ƒS | jtj
u �r|jtjtjfv �r| t|ƒ S | jtjtjfv �r4|jtj
u �r4t| ƒ| S | jtju �rf|jtju �rf| t|| jd d� S | jtju �r˜|jtju �r˜t| |jd d�| S t| ƒt|ƒ S tS ©Nr   r   )Úkind)Úas_exprrk   r   rz   r   r   r   r­   r{   Úmaxr   Ú
as_complexr'   rx   r‚   rb   Ú	normalizeÚas_realÚas_termsr…   )	rH   r~   Úr1Úi1Úr2Úi2r±   r_   r`   r   r   r   Ú__add__¬  s6    þ

""zExpr.__add__c                 C   s   t |tƒrt|ƒ|  S tS r\   ©rk   Únumber_typesr­   r…   r}   r   r   r   Ú__radd__È  s    
zExpr.__radd__c                 C   s
   | |  S r\   r   r}   r   r   r   Ú__sub__Í  s    zExpr.__sub__c                 C   s   t |tƒrt|ƒ|  S tS r\   rÓ   r}   r   r   r   Ú__rsub__Ð  s    
zExpr.__rsub__c                 C   sV  t |ƒ}t|tƒ�rR| j|ju �rN| jtjtjfv r`t| jd |jd  t	| jd |jd ƒƒS | jtj
u r¢| j\}}|j\}}t|| ||  || ||  ƒS | jtju rêt| jt| jƒƒ}|j ¡ D ]\}}t|j||ƒ qÊt|ƒS | jtju �rNt| ji ƒ}| j ¡ D ]6\}	}
|j ¡ D ] \}}t|j|	| |
| ƒ �q �qt|ƒS | jtj
u �r||jtjtjfv �r|| t|ƒ S |jtj
u �rª| jtjtjfv �rªt| ƒ| S | jtju �rÜ|jtju �rÜ| t|| jd d� S | jtju �r|jtju �rt| |jd d�| S | jtju �r(| t|ƒ S |jtju �rBt| ƒ| S t| ƒt|ƒ S tS rÆ   )rÈ   rk   r   rz   r   r   r   r­   r{   rÉ   r   rÊ   r(   rx   r‚   rb   rË   r'   rÌ   rÍ   Ú
as_factorsr…   )rH   r~   rÎ   rÏ   rÐ   rÑ   r±   r_   r`   Út1Úc1Út2Úc2r   r   r   Ú__mul__Õ  sH    ÿ

"""zExpr.__mul__c                 C   s   t |tƒrt|ƒ|  S tS r\   rÓ   r}   r   r   r   Ú__rmul__þ  s    
zExpr.__rmul__c                 C   sÖ   t |ƒ}t|tƒrÒ|jtju rÄ|jd }|dkr8tdƒS |dkrD| S |dkrž| jtju rŽt| ji ƒ}| j 	¡ D ]\}}|| |j|< qnt
|ƒS | | |d   S |dkr´| |  d S ttj| |iƒS ttj| |ƒS tS )Nr   r   rÄ   )rÈ   rk   r   rz   r   r   r{   r­   r(   r‚   rË   Úas_applyrK   rN   r…   )rH   r~   Úexponentr±   r_   r`   r   r   r   Ú__pow__  s(    

zExpr.__pow__c                 C   s(   t |ƒ}t|tƒr$tttj| |ƒƒS tS r\   )rÈ   rk   r   rË   rß   rK   rM   r…   r}   r   r   r   Ú__truediv__  s    
zExpr.__truediv__c                 C   s   t |ƒ}t|tƒr||  S tS r\   ©rÈ   rk   r   r…   r}   r   r   r   Ú__rtruediv__"  s    
zExpr.__rtruediv__c                 C   s*   t |ƒ}t|tƒr&tttj| |fƒƒS tS r\   )rÈ   rk   r   rË   r   r%   r…   r}   r   r   r   Ú__floordiv__(  s    
zExpr.__floordiv__c                 C   s   t |ƒ}t|tƒr||  S tS r\   rã   r}   r   r   r   Ú__rfloordiv__0  s    
zExpr.__rfloordiv__c                 O   s.   t | gtt|ƒ¢R i tdd„ | ¡ D ƒƒ¤ŽS )Nc                 s   s   | ]\}}|t |ƒfV  qd S r\   ©rÈ   r¤   r   r   r   ro   =  rp   z Expr.__call__.<locals>.<genexpr>)rß   ÚmaprÈ   rx   r‚   )rH   r¹   rº   r   r   r   Ú__call__6  s    ÿzExpr.__call__c                 C   sF   t |ƒ}t|tƒs|f}t|ƒdkr4td|› d�ƒ ttj| f| ƒS )Nr   z/C-index should be a single expression but got `ú`)rÈ   rk   rq   rr   rh   r   r   r$   )rH   Úindexr   r   r   Ú__getitem__?  s    
zExpr.__getitem__c                    sb  | j tju rhˆ  | ¡}|du r"| S t d| j¡}|rd| ¡ \}}|dv rPt|ƒS |dksdJ ||fƒ‚|S | j tj	tj
tjfv r‚| S | j tjtjfv r´t| j t‡ fdd„| jD ƒƒƒS | j tju rätt| j t‡ fdd„| jD ƒƒƒƒS | j tju �rVd}| j ¡ D ]6\}}|du �r"| ˆ ¡| }n|| ˆ ¡| 7 }�q |du �rRtdƒ td	ƒS |S | j tju �rÈd}| j ¡ D ]6\}	}
|du �r”|	 ˆ ¡|
 }n||	 ˆ ¡|
 9 }�qr|du �rÄtd
ƒ tdƒS |S | j tju �r>| j\}}}t|tƒ�rø| ˆ ¡}t‡ fdd„|D ƒƒ}t‡ fdd„| ¡ D ƒƒ}tt| j |||fƒƒS | j tju �r¢| jd	 }t|tƒ�rl| ˆ ¡}t‡ fdd„| jdd… D ƒƒ}tt| j |f| ƒƒS | j tju �rØt‡ fdd„| jD ƒƒ}tt| j |ƒƒS | j tjtjfv �rtt| j | j ˆ ¡ƒƒS | j tju �rH| j\}}}| ˆ ¡}| ˆ ¡}tt| j |||fƒƒS t d| j › d| ›�ƒ‚dS )z„Recursively 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   s   | ]}|  ˆ ¡V  qd S r\   ©Ú
substituterl   ©Úsymbols_mapr   r   ro   ]  s   ÿz"Expr.substitute.<locals>.<genexpr>c                 3   s   | ]}|  ˆ ¡V  qd S r\   rñ   rl   ró   r   r   ro   `  s   ÿz?substitute: empty TERMS expression interpreted as int-literal 0r   zAsubstitute: empty FACTORS expression interpreted as int-literal 1r   c                 3   s   | ]}|  ˆ ¡V  qd S r\   rñ   r¥   ró   r   r   ro   ~  rp   c                 3   s    | ]\}}||  ˆ ¡fV  qd S r\   rñ   r¤   ró   r   r   ro     s   ÿc                 3   s   | ]}|  ˆ ¡V  qd S r\   rñ   r¥   ró   r   r   ro   †  rp   c                 3   s   | ]}|  ˆ ¡V  qd S r\   rñ   r¥   ró   r   r   ro   ‰  rp   zsubstitute method for z: )!rz   r   r!   r]   ÚreÚmatchr{   ÚgroupsÚas_arrayr   r   r   r    r   r   rq   r%   rË   r'   r‚   rò   rh   r­   r(   r#   rk   rx   r$   r"   r)   r*   r&   ry   )rH   rô   r„   Úmr‚   Úparenr±   r²   r³   rµ   rà   Útargetr¹   rº   ÚfuncÚoperandsrÀ   rÁ   rÂ   r   ró   r   rò   I  s†    
ÿ
ÿ




ÿ

 

zExpr.substitutec                    sÜ  ˆ| gˆ ¢R i ˆ¤Ž}|dur"|S | j tjtjtjtjfv r@| S | j tjtjtjtj	fv r‚t
t| j t‡ ‡‡fdd„| jD ƒƒƒƒS | j tjtjfv �ri }| j ¡ D ]d\}}|jˆgˆ ¢R i ˆ¤Ž}t|tƒræ|jˆgˆ ¢R i ˆ¤Žn|}||v �r || | }|||< q¤t
t| j |ƒƒS | j tju �r´| jd }t|tƒ�rV|jˆgˆ ¢R i ˆ¤Žn|}	t‡ ‡‡fdd„| jd D ƒƒ}
t‡ ‡‡fd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	d„| jdd… D ƒƒ}t
t| j |f| ƒƒS | j tjtjfv �rht
t| j | jjˆgˆ ¢R i ˆ¤ŽƒƒS | j tju �rÈ| j\}}}|jˆgˆ ¢R i ˆ¤Ž}|jˆgˆ ¢R i ˆ¤Ž}t
t| j |||fƒƒS td
| j › �ƒ‚dS )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   s&   | ]}|j ˆgˆ ¢R i ˆ¤ŽV  qd S r\   ©Útraverserl   ©r¹   rº   Úvisitr   r   ro   ¥  s   ÿz Expr.traverse.<locals>.<genexpr>r   c                 3   s&   | ]}|j ˆgˆ ¢R i ˆ¤ŽV  qd S r\   rþ   ©rm   Úoperandr   r   r   ro   ¶  s   ÿr   c                 3   s.   | ]&\}}||j ˆgˆ ¢R i ˆ¤ŽfV  qd S r\   rþ   r¤   r   r   r   ro   ¸  s   ÿr   c                 3   s&   | ]}|j ˆgˆ ¢R i ˆ¤ŽV  qd S r\   rþ   )rm   rë   r   r   r   ro   ¿  s   ÿztraverse method for )rz   r   r   r   r   r!   r   r    r%   r"   rË   r   rq   r{   r'   r(   r‚   rÿ   rk   r#   rx   r$   r)   r*   r&   ry   )rH   r  r¹   rº   Úresultr{   r_   r`   Úobjrü   rý   Z
kwoperandsÚindicesrÀ   rÁ   rÂ   r   r   r   rÿ   ”  sl    
þÿÿ


ÿÿÿÿ
ÿÿÿÿzExpr.traversec                    s*   g }|f‡ fdd„	}|   |¡ t|ƒdkS )z&Check if self contains other.
        c                    s"   |r| S | ˆ kr|  d¡ | S d S )Nr   )r®   ©ÚexprÚfound©r~   r   r   r  Ñ  s
    
zExpr.contains.<locals>.visitr   )rÿ   rr   )rH   r~   r	  r  r   r
  r   ÚcontainsÌ  s    
zExpr.containsc                 C   s    t ƒ }|fdd„}|  |¡ |S )z3Return a set of symbols contained in self.
        c                 S   s   | j tju r| | ¡ d S r\   )rz   r   r!   Úaddr  r   r   r   r  á  s    zExpr.symbols.<locals>.visit©Úsetrÿ   )rH   r	  r  r   r   r   ÚsymbolsÜ  s    
zExpr.symbolsc                    s$   t ƒ }|f‡ fdd„	‰ |  ˆ ¡ |S )zFReturn a set of expressions used as atoms in polynomial self.
        c                    s¾   | j tju r&| jD ]}| ˆ ¡ q| S | j tjtjfv r<d S | j tju r„t| jd t	ƒr„| 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   )rz   r   r(   r{   rÿ   r'   r   r#   rk   rK   rN   r   r   r  r$   )r  r	  Úb©r  r   r   r  î  s     

z$Expr.polynomial_atoms.<locals>.visitr  )rH   r	  r   r  r   Úpolynomial_atomsé  s    
zExpr.polynomial_atomsc                 C   sz   |   |tdƒi¡}| | }|  |tdƒi¡}t|| | ƒ\}}|tdƒkrrtd|› d|› d|› d|› d| › �
ƒ‚||fS )z�Return a, b such that a * symbol + b == self.

        If self is not linear with respect to symbol, raise RuntimeError.
        r   r   znot a z-linear equation: r™   r˜   z == )rò   r­   Úas_numer_denomÚRuntimeError)rH   Úsymbolr  Úaxr¦   Úzeror’   r   r   r   Úlinear_solve  s    
ÿÿÿÿzExpr.linear_solveN)*r   r	   r
   r   Ústaticmethodr   r   rj   r|   r   rƒ   r†   r‡   rˆ   r‰   r�   r‘   rQ   r[   r   rI   rÃ   rÅ   rÒ   rÕ   rÖ   r×   rÝ   rÞ   rá   râ   rä   rå   ræ   ré   rì   rò   rÿ   r  r  r  r  r   r   r   r   r   �   sJ   B	ÿ
 )	
K8c                 C   s"  t | tƒs| S | jtju rài }| j ¡ D ]p\}}|dkr:q(|jtju rZ|dkrZ|| }d}|jtju rŒ|j ¡ D ]\}}t|||| ƒ qpq(t|||ƒ q(t	|ƒdkr®t
dƒS t	|ƒdkrÔ| ¡ \\}}|dkrÔ|S ttj|ƒS | jtju �rÈd}i }| j ¡ D �]\}}|dk�r�q |jtju �rPt |tƒ�rP|dk�rP|||d   }d}|jtjtjfv �rª|dk�r~||jd 9 }n*|dk�rœ||jd | 9 }nt|||ƒ nf|jtju �r|dk�röt |tƒ�rö|j ¡ D ]\}	}
t||	|
| ƒ �qØnt|||ƒ nt|||ƒ �q t	|ƒdk�s,|dk�rDt |tƒ�s<J ‚t
|ƒS t	|ƒdk�rš| ¡ \\}}|dk�rp|}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ƒ�rDt |tƒ�rDt||ƒ}|| ||  }}n|| d }}|jtju �r¨|jd tju �r¨|jd d | }|jd d | | }ttj||ƒS |jtju �rþ|jd tju �rþ|jd d | | }|jd d | }ttj||ƒS tt|ƒjƒ}t|ƒj ¡ D ]\}}t||| ƒ �qi i  }}| ¡ D ](\}}|dk�rb|||< n
| ||< �qFtttj|ƒƒ| }tttj|ƒƒ| }|jtjtjfv �rÀ|jd dk�rÀ|S ttj||ƒS | jtju �rÊ| 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�r–t|jd dd… |jd dd…  t|jd |jd ƒƒ}||d< n
| |¡ �qöt	|ƒdk�rº|d S ttjt|ƒƒS | jtju �rt t| jƒ\}}}|jtju �r|jd �r|S |S ttj|||fƒS | S )z7Normalize Expr and apply basic evaluation methods.
    r   r   NrÄ   z"')!rk   r   rz   r   r'   r{   r‚   r   rb   rr   r­   r(   Úinteger_typesr   r   rÔ   r#   rK   rM   Úas_term_coeffr   rß   rx   rØ   rË   r%   r   Ú	as_stringrÉ   r®   rq   r"   rè   )r  r^   Útra   rÙ   rÚ   r³   r  ÚeÚb1Úe1ZdividendZdivisorrÛ   rÜ   Úgr»   r¼   ÚlstrD   ÚlastZnew_lastr½   r¾   r¿   r   r   r   rË     sÞ    

$




 
  


$
ÿ
þýü$ÿ
rË   c                 C   s\   t | tƒrt| j| jƒS t | tƒr*t| ƒS t | tƒr@tt	| ƒƒS t | t
ƒrXt
tt| ƒƒS | S )z.Convert non-Expr objects to Expr objects.
    )rk   ÚcomplexrÊ   ÚrealÚimagrÔ   r­   rt   r  Úreprrq   rè   rÈ   ©r  r   r   r   rÈ      s    



rÈ   c                 C   s   t tj| ƒS )zJReturn object as SYMBOL expression (variable or unparsed expression).
    )r   r   r!   r)  r   r   r   Ú	as_symbol°  s    r*  r-   c                 C   sh   t | tƒrttj| |fƒS t | tƒr4ttj| |fƒS t | tƒrT| jtjtjfv rT| S td| › d�ƒ‚dS )z/Return object as INTEGER or REAL constant.
    úcannot convert z to INTEGER or REAL constantN)	rk   rs   r   r   r   ru   r   rz   rO   ©r  rÇ   r   r   r   r­   ¶  s    


r­   c                 C   sH   t | tƒrttj| |fƒS t | tƒr4| jtju r4| S td| › d�ƒ‚dS )z'Return object as INTEGER constant.
    r+  z to INTEGER constantN)rk   rs   r   r   r   rz   rO   r,  r   r   r   Ú
as_integerÃ  s    

r-  c                 C   sŒ   t | tƒrttjt| ƒ|fƒS t | tƒr8ttj| |fƒS t | tƒrx| jtju rR| S | jtju rxttjt| jd ƒ|fƒS t	d| › d�ƒ‚dS )z$Return object as REAL constant.
    r   r+  z to REAL constantN)
rk   rs   r   r   r   ru   rz   r   r{   rO   r,  r   r   r   rÌ   Î  s    


rÌ   r   c                 C   s   t tj| |fƒS )zBReturn object as STRING expression (string literal constant).
    )r   r   r   r,  r   r   r   r  Ý  s    r  c                 C   s   t | tƒr| f} ttj| ƒS )z8Return object as ARRAY expression (array constant).
    )rk   r   r   r    r)  r   r   r   rø   ã  s    
rø   c                 C   s   t tjt| ƒt|ƒfƒS )zDReturn object as COMPLEX expression (complex literal constant).
    )r   r   r   rÈ   )r&  r'  r   r   r   rÊ   ë  s    rÊ   c                 O   s.   t tj| ttt|ƒƒtdd„ | ¡ D ƒƒfƒS )zIReturn object as APPLY expression (function call, constructor, etc.)
    c                 s   s   | ]\}}|t |ƒfV  qd S r\   rç   r¤   r   r   r   ro   ö  rp   zas_apply.<locals>.<genexpr>)r   r   r#   rq   rè   rÈ   rx   r‚   )rü   r¹   rº   r   r   r   rß   ñ  s
    ÿÿrß   c                 C   s   t tj| ||fƒS )z<Return object as TERNARY expression (cond?expr1:expr2).
    )r   r   r"   )r½   r¾   r¿   r   r   r   Ú
as_ternaryù  s    r.  c                 C   s   t tj| ƒS )z-Return object as referencing expression.
    )r   r   r)   ©r  r   r   r   Úas_refÿ  s    r0  c                 C   s   t tj| ƒS )z/Return object as dereferencing expression.
    )r   r   r*   r/  r   r   r   Úas_deref  s    r1  c                 C   s   t tjtj| |fƒS r\   )r   r   r&   r+   r<   ©rÁ   rÂ   r   r   r   Úas_eq  s    r3  c                 C   s   t tjtj| |fƒS r\   )r   r   r&   r+   r=   r2  r   r   r   Úas_ne  s    r4  c                 C   s   t tjtj| |fƒS r\   )r   r   r&   r+   r>   r2  r   r   r   Úas_lt  s    r5  c                 C   s   t tjtj| |fƒS r\   )r   r   r&   r+   r?   r2  r   r   r   Úas_le  s    r6  c                 C   s   t tjtj| |fƒS r\   )r   r   r&   r+   r@   r2  r   r   r   Úas_gt  s    r7  c                 C   s   t tjtj| |fƒS r\   )r   r   r&   r+   rA   r2  r   r   r   Úas_ge  s    r8  c                 C   s¦   t | tƒrŽt| ƒ} | jtju r"| S | jtju rPt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�ƒ‚dS )z+Return expression as TERMS expression.
    r   r   r+  ú to terms ExprN)rk   r   rË   rz   r   r'   r   r-  r{   r   rÌ   rO   rŽ   r)  r   r   r   rÍ   #  s    
""rÍ   c                 C   sô   t | tƒrÜt| ƒ} | jtju r"| S | jtju r~t| jƒdkr~| j 	¡ \\}}|dkrdttj|diƒS ttj|dt 
|¡diƒS | jtju rÌ| jd tju rÌ| 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�ƒ‚dS )z-Return expression as FACTORS expression.
    r   r   r   rÄ   r+  r9  N)rk   r   rË   rz   r   r(   r'   rr   r{   r‚   Únumberr#   rK   rM   rO   rŽ   )r  r²   r³   r   r   r   rØ   2  s$    
ÿþ(rØ   c                 C   sþ   t | tƒræt| ƒ} | jtju r8t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 rÞ| jd tju rÞt| jd d ƒ\}}ttj|| jd d ƒ|fS | dfS tdt| ƒ› d�ƒ‚dS )z0Return expression as term-coefficient pair.
    r   r   r+  z to term and coeffN)rk   r   rË   rz   r   r   r-  r{   r   rÌ   r'   rr   r‚   r#   rK   rM   r  rß   rO   rŽ   )r  r²   r³   r  ra   r   r   r   r  G  s    
r  c                 C   sN  t | tƒ�r6t| ƒ} | jtjtjtjtjtj	tj
fv rB| tdƒfS | jtju r¨| jd tju rœ| jd sœtt| jd ƒ\}}|d |d  |d |d  fS | tdƒfS | jtju �r¢g g  }}| j ¡ D ]0\}}t|ƒ\}}|| }| |¡ | |¡ qÊtdƒtdƒ }}tt|ƒƒD ]L}	||	 }tt|ƒƒD ]}
|	|
k�r2|||
 9 }�q2||7 }|||	 9 }�q|jtjtjfv �rš|jd dk �rš| |  }}||fS | jtju �r6tdƒtdƒ }}| j ¡ D ]`\}}t|ƒ\}}|dk�r||| 9 }||| 9 }n&|dk �rÌ|||  9 }|||  9 }�qÌ||fS tdt| ƒ› d�ƒ‚dS )z+Return expression as numer-denom pair.
    r   r   r   r+  z to numer and denomN)rk   r   rË   rz   r   r   r   r   r!   r$   r"   r­   r#   r{   rK   rM   rè   r  r'   r‚   r®   r¯   rr   r(   rO   rŽ   )r  ZnumersZdenomsr²   r³   Únr^   r»   r¼   ÚiÚjr  r  ZbnumerZbdenomr   r   r   r  \  sR    ÿ 


$

r  c                  c   s   d} | d7 } | V  qd S r  r   )Úcounterr   r   r   Ú_counter‰  s    r?  c                    sJ   i ‰ ‡ fdd„}t  djdddd�|| ¡}d|vs6J ‚d	|vsBJ ‚|ˆ fS )
zgReplace quoted substrings of input string.

    Return a new string and a mapping of replacements.
    c                    s\   |   ¡ d d… \}}|r$|d d… }dddœ|d  }|› d|› dt ¡ › d	�}|ˆ |< |S )
Nr   rÄ   ZSINGLEÚDOUBLE)ú'ú"r   z@__f2py_QUOTES_r’   ú@)r÷   ÚCOUNTERÚ__next__)rù   rÇ   r„   Úpr_   ©r^   r   r   Úrepl›  s    zeliminate_quotes.<locals>.replz+({kind}_|)({single_quoted}|{double_quoted})z
\w[\w\d_]*z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))rÇ   Úsingle_quotedZdouble_quotedrB  rA  )rõ   ÚsubÚformat)rD   rH  Znew_sr   rG  r   Úeliminate_quotes”  s    
ýürL  c                 C   sD   |  ¡ D ]6\}}|d| d¡… }|r.|d7 }|  ||| ¡} q| S )z!Inverse of eliminate_quotes.
    NrC  r’   )r‚   ÚfindÚreplace)rD   r^   r_   r`   rÇ   r   r   r   Úinsert_quotes±  s    rO  c                 C   s6  d\}}t | ƒ}dD ]2\}}|  |¡}|dkr0q||k r|}|| }}q|du rX| i fS |}|  ||¡}|  ||d |¡|  ||d |¡kr¾|  ||d ¡}|dkrhtd|| › d| ›�ƒ‚qhdd	d
ddœ| }d|› dt ¡ › d�}	| |t |ƒ |… }
t| |t |ƒ d… ƒ\}}|
||	< | d|… |	 | |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–   Ú{rP  ú@__f2py_PARENTHESIS_r’   rC  )rr   rM  ÚcountÚ
ValueErrorrD  rE  Úreplace_parenthesis)rD   rÁ   rÂ   Zmn_iZleft_Zright_r<  r=  rF  r_   r`   r±   r^   r   r   r   rW  ¼  s.    

$rW  c                 C   s    |   d¡sJ | ƒ‚|  d¡d S )NrT  r’   r-   )Ú
startswithÚsplit)rD   r   r   r   Ú_get_parenthesis_kindç  s    rZ  c                 C   sZ   |  ¡ D ]L\}}t|ƒ}tddddd�| }tdddd	d�| }|  ||| | ¡} q| S )
z$Inverse of replace_parenthesis.
    r‹   r–   rS  rP  )rð   rï   rR  rî   r�   r—   Ú}rQ  )r‚   rZ  rx   rN  )rD   r^   r_   r`   rF  rÁ   rÂ   r   r   r   Úunreplace_parenthesisì  s    r\  c                 C   s8   t |d� | ¡}t|tƒr|S td| › d|› d�ƒ‚dS )z®Create an expression from a string.

    This is a "lazy" parser, that is, only arithmetic operations are
    resolved, non-arithmetic operations are treated as symbols.
    ri   zfailed to parse `z` to Expr instance: got `rê   N)Ú_FromStringWorkerrj   rk   r   rV  )rD   rE   r±   r   r   r   rF   ÷  s    
rF   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_Pairc                 C   s   || _ || _d S r\   r2  )rH   rÁ   rÂ   r   r   r   r|     s    z_Pair.__init__c                 C   s@   | j | j }}t|tƒr"| |¡}t|tƒr6| |¡}t||ƒS r\   )rÁ   rÂ   rk   r   rò   r^  )rH   rô   rÁ   rÂ   r   r   r   rò   
  s    



z_Pair.substitutec                 C   s    t | ƒj› d| j› d| j› d�S rŠ   )rŽ   r   rÁ   rÂ   r�   r   r   r   r�     s    z_Pair.__repr__N)r   r	   r
   r|   rò   r�   r   r   r   r   r^    s   r^  c                   @   s4   e Zd Zejfdd„Zdd„ Zdd„ Zddd	„Zd
S )r]  c                 C   s   d | _ d | _|| _d S r\   )ÚoriginalÚ
quotes_maprE   rG   r   r   r   r|     s    z_FromStringWorker.__init__c                 C   s   t || jƒS r\   )rO  r`  )rH   rD   r   r   r   Úfinalize_string  s    z!_FromStringWorker.finalize_stringc                 C   s   || _ t|ƒ\}| _|  |¡S r\   )r_  rL  r`  Úprocess)rH   ÚinpZunquotedr   r   r   rj      s    z_FromStringWorker.parser  c                    sÌ  t |ttfƒr*t|ƒ‡ ‡fdd„|D ƒƒS t |tƒsDJ t|ƒ|fƒ‚t|ƒ\}‰| ¡ }‡‡fdd„‰d|v rÈˆ| d¡ƒ}ˆ dkr’tˆ |¡ƒS ˆ dkr´t	|ƒdkr´t
ˆ |¡Ž S td	ˆ › d
|› �ƒ‚t d|¡}|�r&ˆ dksêJ ˆ ƒ‚ˆ| ¡ ƒ\}}}ˆ |¡}ˆ |¡}ˆ |¡}t|||ƒS ˆjtju �rFt d|tj¡}nt d|¡}|�r¸| ¡ \}	}
}ˆjtju �r€d|
 d }
ˆ ˆ|	|fƒ¡\}	}tj|
ˆjd�}
ttj|
|	|fƒS t d|¡}|�rî| ¡ \}}ˆ|ƒ}t|ˆ |¡ƒS t d|¡}t	|ƒdk�rŽˆ ˆ|d �pdƒ¡}t|ddd… |ddd… ƒD ]J\}}ˆ ˆ|ƒ¡}| ¡ }|dk�rp||7 }n|dk�s~J ‚||8 }�q>|S ˆjtju �rÊd|v �rÊˆ| d¡ƒ}ttjtˆ |¡ƒƒS t dˆjtju �râ|n
| dd¡¡}t	|ƒdk�ršˆ|ƒ}ˆjtju�r"dd„ |D ƒ}ˆ |d ¡}t|ddd… |ddd… ƒD ]F\}}ˆ |¡}| ¡ }|dk�r|||9 }n|dk�sŠJ ‚|| }�qN|S | d¡�s²| d ¡�rètjtj d!œ|d  }ˆ ˆ|dd… ƒ¡}t||ƒS ˆjtju�rNd|v �rNtt!ˆ| d¡ƒƒƒ}ˆ |d ¡}|dd… D ]}ˆ |¡}|| }�q0|S t d"j"d#d$d%�|¡}|�r¤| ¡ \}}}|�r�| #¡ �r�t$|ƒ}t%t$|ƒ|�p d&ƒS t d'j"d(d)d$d*�|¡}|�r,| ¡ \}}}}|�rê| #¡ �rêt$|ƒ}| &¡ }d+|v �rt't(| d+d,¡ƒ|�pd-ƒS t't(|ƒ|�p(d&ƒS |ˆj)v �r`|d| *d.¡… }t+ˆj)| |�p\dƒS |ˆv �rÒt,|ƒ}ˆ ˆˆ| ƒ|d/k�rŽdnd¡}|d/k�r®t |tƒ�r®|S |d0v �rÒt |tƒ�rÊ|f}t-|ƒS t d1|¡}|�r„| ¡ \}}}ˆ ˆ|ƒ¡}ˆ ˆ|ƒdd2… d¡}t |tƒ�s*|f}|d/k�rnt.d3d„ |D ƒƒ}td4d„ |D ƒƒ}t/|g|¢R i |¤ŽS |d5k�s|J ‚|| S t d6|¡}|�ržt0|ƒS ˆ 1ˆ|ƒ¡}t2d7|›d8ˆj3› d9�ƒ t0|ƒS ):a´  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   s   | ]}ˆ  |ˆ ¡V  qd S r\   )rb  )rm   Zs_)ÚcontextrH   r   r   ro   0  rp   z,_FromStringWorker.process.<locals>.<genexpr>c                    s*   t | ttfƒr t| ƒtˆ| ƒƒS t| ˆ ƒS r\   )rk   Úlistrq   rŽ   rè   r\  )r±   )Úraw_symbols_mapÚrestorer   r   rg  8  s    z*_FromStringWorker.process.<locals>.restoreú,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Ú.ri   z\A(\w[\w\d_]*)\s*[=](.*)\Zz((?<!\d[edED])[+-])r   r   r›   Nú+rš   z//z(?<=[@\w\d_])\s*([*]|/)ú**ú@__f2py_DOUBLE_STAR@c                 S   s   g | ]}|  d d¡‘qS )rl  rk  )rN  r  r   r   r   r¢   …  s   ÿz-_FromStringWorker.process.<locals>.<listcomp>rª   r�   r©   )rª   r©   z\A({digit_string})({kind}|)\Zz\d+z_(\d+|\w[\w\d_]*))Zdigit_stringrÇ   r-   z7\A({significant}({exponent}|)|\d+{exponent})({kind}|)\Zz[.]\d+|\d+[.]\d*z[edED][+-]?\d+)Zsignificantrà   rÇ   r^   r  é   rC  rð   rí   z4\A(.+)\s*(@__f2py_PARENTHESIS_(ROUND|SQUARE)_\d+@)\ZrÄ   c                 s   s$   | ]}t |tƒr|j|jfV  qd S r\   )rk   r^  rÁ   rÂ   r¥   r   r   r   ro   Ù  s   
ÿc                 s   s   | ]}t |tƒs|V  qd S r\   )rk   r^  r¥   r   r   r   ro   Û  rp   rï   z\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r�   )4rk   re  rq   rŽ   rt   rW  ÚstriprY  rb  rr   rÊ   ry   rõ   rö   r÷   r.  rE   r   r   ÚIr+   rF   r   r   r&   r^  Úzipr%   r   rN  rX  r*   r)   ÚreversedrK  Úisdigitrs   r-  rB   rÌ   ru   r`  rM  r  rZ  rø   rx   rß   r*  ra  rh   r_  )rH   rD   rd  r±   rý   rù   Úoperr¾   r¿   rÁ   rÀ   rÂ   Zkeynamer„   r  rz   r  r’   rÇ   rú   r‚   rû   r¹   rº   r   )rd  rf  rg  rH   r   rb  %  s2   
ÿ


ÿÿ&

ÿ
þÿ&




þþüü

ÿ

ÿ
ÿz_FromStringWorker.processN)r  )	r   r	   r
   r   r   r|   ra  rj   rb  r   r   r   r   r]    s   r]  )r-   )r-   )r-   )r   )r   ):r   Ú__all__rõ   re   Úenumr   Úmathr   r   r   r+   rK   Ú	ExceptionrO   rQ   rs   r  ru   rÔ   rb   ÚUserWarningrc   rh   r   rË   rÈ   r*  r­   r-  rÌ   r  rø   rÊ   rß   r.  r0  r1  r3  r4  r5  r6  r7  r8  rÍ   rØ   r  r  r?  rD  rL  rO  rW  rZ  r\  r   rF   r^  r]  r   r   r   r   Ú<module>   sn   	    ~ 





-+