U
    ©€lj¡  ã                   @   s0   d Z ddlmZmZ dd„ Zdd„ Zdd„ Zd	S )
z
Python introspection helpers.
é    )ÚCodeTypeÚFunctionTypec                    sŒ   t tdƒr$ˆjf dd„ ˆ  ¡ D ƒŽS dddddd	d
dddddddg}t tdƒrZ| dd¡ t tdƒrp| dd¡ ‡ ‡fdd„|D ƒ}t|Ž S )NÚreplacec                 S   s   i | ]\}}d | |“qS ©Zco_© )Ú.0ÚkÚvr   r   ú:/tmp/pip-unpacked-wheel-nys5wmuy/automat/_introspection.pyÚ
<dictcomp>
   s      zcopycode.<locals>.<dictcomp>ZargcountZnlocalsZ	stacksizeÚflagsÚcodeZconstsÚnamesÚvarnamesÚfilenameÚnameZfirstlinenoZlnotabZfreevarsZcellvarsÚco_kwonlyargcounté   ZkwonlyargcountÚco_posonlyargcountZposonlyargcountc              	      s"   g | ]}ˆ   |tˆd | ƒ¡‘qS r   ©ÚgetÚgetattr©r   r   ©ÚchangesÚtemplater   r
   Ú
<listcomp>    s     zcopycode.<locals>.<listcomp>)Úhasattrr   r   ÚitemsÚinsert)r   r   r   Úvaluesr   r   r
   Úcopycode   s.    
ò

r!   c                    s6   ddddg}‡ ‡fdd„|D ƒ}t tˆj|ƒf|žŽ S )NÚglobalsr   ÚdefaultsÚclosurec              	      s&   g | ]}ˆ   |tˆd | d  ƒ¡‘qS )Ú__r   r   ©Úfuncchangesr   r   r
   r   +   s    z copyfunction.<locals>.<listcomp>)Úfunctionr!   Ú__code__)r   r'   Zcodechangesr   r    r   r&   r
   Úcopyfunction$   s    üÿr*   c                    s   ‡ fdd„}|S )zL
    Preserve the name of the given function on the decorated function.
    c                    s   t | tˆ jd�tˆ jd�ƒS )N)r   )r*   ÚdictÚ__name__)Z	decorated©Úfr   r
   Ú	decorator6   s    zpreserveName.<locals>.decoratorr   )r.   r/   r   r-   r
   ÚpreserveName1   s    r0   N)	Ú__doc__Útypesr   r   r   r(   r!   r*   r0   r   r   r   r
   Ú<module>   s   