B
    \]                 @   st   d dl mZmZ ddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ G d	d
 d
eZG dd deZdS )    )absolute_importprint_function   )CythonTransform)EncodedString)Options)
PyrexTypes	ExprNodes   )ExpressionWriterc               @   s   e Zd Zdd Zdd ZdS )AnnotationWriterc             C   s   |  d d S )Nz<???>)put)selfnode r   @lib/python3.7/site-packages/Cython/Compiler/AutoDocTransforms.py
visit_Node   s    zAnnotationWriter.visit_Nodec             C   s   |  d d S )Nz<lambda>)r   )r   r   r   r   r   visit_LambdaNode   s    z!AnnotationWriter.visit_LambdaNodeN)__name__
__module____qualname__r   r   r   r   r   r   r   
   s   r   c                   s   e Zd Z fddZdd Zdd Zdd Zd ddZdd Zd!ddZ	dd Z
 fddZdd Zdd Zdd Zdd Zdd Z  ZS )"EmbedSignaturec                s    t t| | d | _d | _d S )N)superr   __init__
class_name
class_node)r   context)	__class__r   r   r      s    zEmbedSignature.__init__c             C   s   t  }||}|S )N)r   write)r   r   writerresultr   r   r   	_fmt_expr   s    
zEmbedSignature._fmt_exprc             C   s   |j tjks|jr|j}n|j j|jdd}|jrj| |j}|d|  }|jr| |j}|d|  }n|jr| |j}|d|  }|S )Nr   )for_displayz: %sz = %sz=%s)	typer   py_object_typeis_self_argnamedeclaration_code
annotationr!   default)r   argdocr(   r)   r   r   r   _fmt_arg!   s    zEmbedSignature._fmt_argc             C   s(   |j }|jr$| |j}|d|  }|S )Nz: %s)r&   r(   r!   )r   r*   arg_docr(   r   r   r   _fmt_star_arg2   s
    zEmbedSignature._fmt_star_argr   NFc       
      C   s   g }x,|D ]$}|r|j js
| |}	||	 q
W |rR| |}	||d|	  n|rb||d |r~| |}	|d|	  |S )Nz*%s*z**%s)entryr%   r,   appendr.   insert)
r   argsnpargspargsnkargskargs	hide_selfarglistr*   r-   r   r   r   _fmt_arglist9   s    



zEmbedSignature._fmt_arglistc             C   s    |t jkrd S |jdddS d S )N r   )r"   )r   r$   r'   )r   Zretr   r   r   _fmt_ret_typeL   s    
zEmbedSignature._fmt_ret_typec             C   sr   | j ||||||
d}d|}d||f }|r<d||f }d }|rP| |}n|	r^| |	}|rnd||f }|S )N)r8   z, z%s(%s)z%s.%sz%s -> %s)r:   joinr!   r<   )r   Zcls_name	func_namer3   r4   r5   r6   r7   return_exprreturn_typer8   r9   Zarglist_docZfunc_docZret_docr   r   r   _fmt_signatureR   s     

zEmbedSignature._fmt_signaturec             C   s   |rd||f S |S d S )Nz%s
%sr   )r   	signatureZnode_docr   r   r   _embed_signatureh   s    zEmbedSignature._embed_signaturec                s   t js
|S tt| |S d S )N)r   Z
docstringsr   r   __call__)r   r   )r   r   r   rD   n   s    zEmbedSignature.__call__c             C   sV   | j }| j}|| _y|j| _ W n tk
r:   |j | _ Y nX | | || _ || _|S )N)r   r   r&   AttributeErrorZvisitchildren)r   r   ZoldnameZoldclassr   r   r   visit_ClassDefNodet   s    
z!EmbedSignature.visit_ClassDefNodec             C   s   |S )Nr   )r   r   r   r   r   r      s    zEmbedSignature.visit_LambdaNodec             C   s*  | j d s|S d}d}|jjrH| jo,|jdk}|s6|S d | j }}d}n| j|j }}t|dd}t|j| }| j	|||j||j
||j|jd |d
}|r&|r| jjjj}	n|j}	|	jd k	r|	j}
n$|st|dd d k	r|jjj}
nd }
| ||
}t||	_|s&t|dd d k	r&t||jj_|S )	NembedsignatureFr   TZnum_kwonly_argsr   )r?   r@   r8   py_func)current_directivesr0   Z
is_specialr   r&   r   getattrlenr3   rA   Zstar_argZstarstar_argZreturn_type_annotationr#   Zscoper+   rH   rC   r   )r   r   Zis_constructorr8   r   r>   r6   r4   rB   Z
doc_holderold_docnew_docr   r   r   visit_DefNode   sB    



zEmbedSignature.visit_DefNodec             C   s   | j d s|S |js|S | j| j|jjj|jj|jd}|r|j	j
d k	rR|j	j
}n t|dd d k	rn|jj	j
}nd }| ||}t||j	_
t|dr|jd k	rt||jj	_
|S )NrG   )r@   rH   )rI   ZoverridablerA   r   Z
declaratorbaser&   r3   r@   r0   r+   rJ   rH   rC   r   hasattr)r   r   rB   rL   rM   r   r   r   visit_CFuncDefNode   s&    


z!EmbedSignature.visit_CFuncDefNodec             C   s   | j d s|S |j}|jdkr~|jjddd}|jjs@d| }n|jjrX|jjd | }d|j|f }| 	||j
}t||_
|S )	NrG   Zpublicr;   r   )r"   z'%s'.z%s: %s)rI   r0   Z
visibilityr#   r'   Zis_pyobjectZis_extension_typeZmodule_namer&   rC   r+   r   )r   r   r0   Z	type_namerB   rM   r   r   r   visit_PropertyNode   s    



z!EmbedSignature.visit_PropertyNode)r   Nr   NF)r   Nr   NNNF)r   r   r   r   r!   r,   r.   r:   r<   rA   rC   rD   rF   r   rN   rQ   rS   __classcell__r   r   )r   r   r      s&     
   
)r   N)Z
__future__r   r   ZVisitorr   ZStringEncodingr   r;   r   r   r	   Z
CodeWriterr   r   r   r   r   r   r   <module>   s   
