o
    @a                     @   s0   d Z ddlmZ ddlmZ G dd deZdS )zA
OptimizableComp finds whether a comprehension can be optimized.
    )Identifiers)NodeAnalysisc                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
OptimizableComprehensionz.Find whether a comprehension can be optimized.c                    s   t  | _tt| t d S N)setresultsuperr   __init__r   )self	__class__ L/usr/lib/python3/dist-packages/pythran/analyses/optimizable_comprehension.pyr	      s   z!OptimizableComprehension.__init__c                    sH   dd |D d}|D ] |  t }|t fdd|D M }q|S )Nc                 S   s   h | ]}|j jqS r   targetid).0genr   r   r   	<setcomp>   s    z?OptimizableComprehension.check_comprehension.<locals>.<setcomp>Tc                 3   s$    | ]}| j jk|vB V  qd S r   r   )r   Zidentittargetsr   r   	<genexpr>   s    
z?OptimizableComprehension.check_comprehension.<locals>.<genexpr>)Zgatherr   all)r
   ZitersZoptimizableZidsr   r   r   check_comprehension   s   z,OptimizableComprehension.check_comprehensionc                 C       |  |jr| j| d S d S r   r   
generatorsr   addr
   Znoder   r   r   visit_ListComp      z'OptimizableComprehension.visit_ListCompc                 C   r   r   r   r   r   r   r   visit_GeneratorExp   r!   z+OptimizableComprehension.visit_GeneratorExp)	__name__
__module____qualname____doc__r	   r   r    r"   __classcell__r   r   r   r   r   	   s    r   N)r&   Zpythran.analyses.identifiersr   Zpythran.passmanagerr   r   r   r   r   r   <module>   s    