o
    í@Ëat  ã                   @   s4   d Z ddlmZ ddlZdd„ ZG dd„ deƒZdS )z) Replaces **2 by a call to numpy.square. é    )ÚTransformationNc                 C   s2   t | tjƒrt| jƒ| jfS t | tjƒr| jS | S )N)Ú
isinstanceÚastZ	AttributeÚgetidÚvalueÚattrÚNameÚid)Únode© r   úG/usr/lib/python3/dist-packages/pythran/optimizations/simplify_except.pyr      s
   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚSimplifyExcepta  
    Remove redundant except clauses

    >>> import gast as ast
    >>> from pythran import passmanager, backend
    >>> node = ast.parse('try: pass\nexcept (OSError, OSError): pass')
    >>> pm = passmanager.PassManager("test")
    >>> _, node = pm.apply(SimplifyExcept, node)
    >>> print(pm.dump(backend.Python, node))
    try:
        pass
    except OSError:
        pass
    c                 C   s¶   t |jtjƒrYdd„ |jjD ƒ}g }t|jjƒD ]\}}t|ƒ}||v r*| |¡ q| |¡ qt	|ƒD ]	}|jj 
|¡ q4t|jjƒdkrP|jjd |_d| _|  jt|ƒO  _|S )Nc                 S   s   h | ]}t |ƒ’qS r   )r   )Ú.0Úeltr   r   r   Ú	<setcomp>!   s    z5SimplifyExcept.visit_ExceptHandler.<locals>.<setcomp>é   r   T)r   Útyper   ZTupleÚeltsÚ	enumerater   ÚremoveÚappendÚreversedÚpopÚlenÚupdateÚbool)Úselfr
   Zall_idsZ	to_removeÚir   Zeltidr   r   r   Úvisit_ExceptHandler   s   z"SimplifyExcept.visit_ExceptHandlerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s    r   )r"   Zpythran.passmanagerr   Zgastr   r   r   r   r   r   r   Ú<module>   s
    