o
    @a                     @   sH   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd deZ	dS )	z* ParallelMaps detects parallel map(...).      )Aliases)PureExpressions)ModuleAnalysisMODULESc                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )ParallelMapsz.Yields the est of maps that could be parallel.c                    s   t  | _tt| tt d S N)setresultsuperr   __init__r   r   self	__class__ @/usr/lib/python3/dist-packages/pythran/analyses/parallel_maps.pyr      s   zParallelMaps.__init__c                    sT   t dd  j|j D r&t  fdd j|jd  D r( j| d S d S d S )Nc                 s   s     | ]}|t d  d kV  qdS )builtinsmapNr   ).0aliasr   r   r   	<genexpr>   s    z*ParallelMaps.visit_Call.<locals>.<genexpr>c                 3   s    | ]}| j v V  qd S r   )Zpure_expressions)r   fr   r   r   r      s    r   )allaliasesfuncargsr
   add)r   noder   r   r   
visit_Call   s   
zParallelMaps.visit_Callc              	   C   s(   |D ]}t dddd|j qd S )NzI:z{0} {1}z-call to the `map' intrinsic could be parallelz
(line {0}))printformatlineno)r   datar   r   r   r   display   s   
zParallelMaps.display)__name__
__module____qualname____doc__r   r   r$   __classcell__r   r   r   r   r   	   s
    r   N)
r(   Zpythran.analyses.aliasesr   Z!pythran.analyses.pure_expressionsr   Zpythran.passmanagerr   Zpythran.tablesr   r   r   r   r   r   <module>   s    