o
    @a                     @   s@   d Z ddlmZ ddlmZ ddlZddlZG dd deZdS )zC
Dependencies lists the functions and types required by a function
    )ModuleAnalysis)demangleNc                       s  e Zd Zi ejdejdejdejdejdej	dej
dejdejd	ejd
ejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdi
Zejdejdejdejdejdej	d ej
d!ejd"ejd#ejd$ejd%ejd&ejd'iZ  f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-dBdC Z.dDdE Z/dFdG Z0dHdI Z1  Z2S )JDependencies)operatoradd)r   sub)r   mul)r   Zdiv)r   mod)r   pow)r   lshift)r   rshift)r   or_)r   Zxor_)r   and_)r   matmul)r   floordiv)r   invert)r   not_)r   pos)r   neg)r   eq)r   ne)r   lt)r   le)r   gt)r   ge)r   is_)r   is_not)r   contains)r   iadd)r   isub)r   imul)r   Zidiv)r   imod)r   ipow)r   ilshift)r   irshift)r   ior)r   ixor)r   iand)r   imatmul)r   	ifloordivc                    s   t  | _tt|   d S N)setresultsuperr   __init__)self	__class__ ?/usr/lib/python3/dist-packages/pythran/analyses/dependencies.pyr.   >   s   zDependencies.__init__c                 C      | j d | | d S )N)builtinslistr,   r   Zgeneric_visitr/   noder2   r2   r3   
visit_ListB      zDependencies.visit_Listc                 C   r4   )N)r5   tupler7   r8   r2   r2   r3   visit_TupleF   r;   zDependencies.visit_Tuplec                 C   r4   )N)r5   r+   r7   r8   r2   r2   r3   	visit_SetJ   r;   zDependencies.visit_Setc                 C   r4   )N)r5   dictr7   r8   r2   r2   r3   
visit_DictN   r;   zDependencies.visit_Dictc                 C   r4   )N)typesslicer7   r8   r2   r2   r3   visit_SliceR   r;   zDependencies.visit_Slicec                 C   r4   )N)r5   pythranandr7   r8   r2   r2   r3   	visit_AndV   r;   zDependencies.visit_Andc                 C   r4   )N)r5   rD   orr7   r8   r2   r2   r3   visit_OrZ   r;   zDependencies.visit_Orc                 C   s4   |  |j | jtjt|j  |  |j d S r*   )	visitleftr,   r   r   OpMaptypeoprightr8   r2   r2   r3   visit_BinOp^   s   zDependencies.visit_BinOpc                 C   s(   | j tjt|j  | |j d S r*   )r,   r   r   rK   rL   rM   rI   operandr8   r2   r2   r3   visit_UnaryOpc   s   zDependencies.visit_UnaryOpc                 C   sH   |  |j |jD ]}| jtjt|  q	|jD ]}|  | qd S r*   )	rI   rJ   opsr,   r   r   rK   rL   comparators)r/   r9   rM   Z
comparatorr2   r2   r3   visit_Compareg   s   

zDependencies.visit_Comparec                 C   sL   |  |j | jtjt|j  | jtjt|j  |  |j	 d S r*   )
rI   targetr,   r   r   rK   rL   rM   IOpMapvaluer8   r2   r2   r3   visit_AugAssignn   s   zDependencies.visit_AugAssignc                 C   r4   )N)r5   printr7   r8   r2   r2   r3   visit_Printu   r;   zDependencies.visit_Printc                 C   r4   )N)r5   assertr7   r8   r2   r2   r3   visit_Asserty   r;   zDependencies.visit_Assertc                 C   r4   )N)Zutilsyieldr7   r8   r2   r2   r3   visit_Yield}   r;   zDependencies.visit_Yieldc                 C   s   |j d u r| jd d S t|j tr| jd d S t|j tr)| jd d S t|j r7| jd d S t|j rE| jd d S d S )N)r5   None)rA   str)rA   complex)numpynan)rb   inf)	rW   r,   r   
isinstancer`   ra   mathZisnanZisinfr8   r2   r2   r3   visit_Constant   s   
zDependencies.visit_Constantc                    s.    fdd  |}|o| j | d S  d S )Nc                    s:   t | tjrt| jfS t | tjr | j| jf S d S r*   )re   astNamer   idZ	AttributerW   attr)nrecr2   r3   rn      s
   z)Dependencies.visit_Attribute.<locals>.rec)r,   r   )r/   r9   rk   r2   rm   r3   visit_Attribute   s   zDependencies.visit_Attribute)3__name__
__module____qualname__rh   ZAddZSubZMultZDivZModZPowZLShiftZRShiftZBitOrZBitXorZBitAndZMatMultZFloorDivZInvertZNotZUAddZUSubZEqZNotEqZLtZLtEZGtZGtEZIsZIsNotZInZNotInrK   rV   r.   r:   r=   r>   r@   rC   rF   rH   rO   rQ   rT   rX   rZ   r\   r^   rg   ro   __classcell__r2   r2   r0   r3   r      s    	
"r   )	__doc__Zpythran.passmanagerr   Zpythran.conversionr   Zgastrh   rf   r   r2   r2   r2   r3   <module>   s    