o
    e/                     @   s|   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	 ddl
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   )ExpressionWriter)warningc                   @   s:   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdS )AnnotationWriterzW
    A Cython code writer for Python expressions in argument/variable annotations.
    Nc                 C   s   t |  || _d| _dS )zdescription is optional. If specified it is used in
        warning messages for the nodes that don't convert to string properly.
        If not specified then no messages are generated.
        FN)r
   __init__description
incomplete)selfr    r   QD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Compiler/AutoDocTransforms.pyr      s   

zAnnotationWriter.__init__c                 C   6   |  d d| _| jrt|jd| jdd d S d S )Nz<???>Tz6Failed to convert code to string representation in {0}r   levelputr   r   r   posformatr   noder   r   r   
visit_Node   s   

zAnnotationWriter.visit_Nodec                 C   r   )Nz<lambda>Tz8Failed to convert lambda to string representation in {0}r   r   r   r   r   r   r   visit_LambdaNode    s   

z!AnnotationWriter.visit_LambdaNodec                 C   s   |  |d d S )N )Zemit_stringr   r   r   r   visit_UnicodeNode)   s   z"AnnotationWriter.visit_UnicodeNodec                 C   s   |  |jj d S N)r   stringZunicode_valuer   r   r   r   visit_AnnotationNode.   s   z%AnnotationWriter.visit_AnnotationNoder    )	__name__
__module____qualname____doc__r   r   r   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
 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 r    )superr'   r   
class_name
class_node)r   context	__class__r   r   r   4   s   
zEmbedSignature.__init__c                 C      t  }||}|S r    )r
   writer   r   writerresultr   r   r   	_fmt_expr9      
zEmbedSignature._fmt_exprc                 C   r.   r    )r   r/   r0   r   r   r   _fmt_annotation?   r4   zEmbedSignature._fmt_annotationc                 C   s,   | j d }|dk| _|dk| _|dk| _d S )Nzembedsignature.formatcpythonZclinic)current_directivesis_format_cis_format_pythonis_format_clinic)r   Zsignature_formatr   r   r   _setup_formatE   s   


zEmbedSignature._setup_formatc                 C   s   |j }d }d }|jr| jrd}n(|jr| jrd}n| jr,|jtjur+|jj|j dd}n| j	r8|j
s8| |j}|j
rD| jsD| |j
}|jrM| |j}|r_|d|  }|r]|d|  }|S |rg|d|  }|S )Nz$selfz$typer   Zfor_display: %sz = %sz=%s)nameis_self_argr;   Zis_type_argr9   typer   py_object_typedeclaration_coder:   
annotation	_fmt_typer5   defaultr3   )r   argarg_docrD   Z
defaultvalr   r   r   _fmt_argK   s>   zEmbedSignature._fmt_argc                 C   s.   |j }|jr| js| |j}|d|  }|S )Nr>   )r?   rD   r;   r5   )r   rG   rH   rD   r   r   r   _fmt_star_argh   s   zEmbedSignature._fmt_star_argr   NFc                 C   s   g }|D ]}	|r|	j js| |	}
||
 q|r)| |}
||| d|
  n
|r3||| d |r;||d |rI| |}
|d|
  |S )Nz*%s*/z**%s)entryr@   rI   appendrJ   insert)r   argsnpoargsnpargspargsnkargskargs	hide_selfarglistrG   rH   r   r   r   _fmt_arglistp   s"   



zEmbedSignature._fmt_arglistc                 C   s   |t ju rd S | jr|jddd}|S | jr?d }|jr!| jd }n|jr(| }|d u r=|jddd}|	dd	dd}|S d S )	Nr   r   r=   Zc_string_type _rK   p)
r   rB   r9   rC   r:   Z	is_stringr8   Z
is_numericZpy_type_namereplace)r   rA   coderD   r   r   r   rE      s    
zEmbedSignature._fmt_typec              	   C   s   | j |||||||d}d|}d||f }| jr"|r"d||f }| js>d }|	r/| |	}n|
r6| |
}|r>d||f }|S )N)rV   z, z%s(%s)%s.%sz%s -> %s)rX   joinr9   r;   r5   rE   )r   cls_name	func_namerP   rQ   rR   rS   rT   rU   return_exprreturn_typerV   rW   Zarglist_docZfunc_docZret_docr   r   r   _fmt_signature   s"   


zEmbedSignature._fmt_signaturec                 C   sR   | j r
| jd r
|S |r| j rd}nd}|||f S | j r#d}|| S d}|| S )NZbindingz	%s
--

%sz%s
%sz%s
--

z%s)r;   r8   )r   	signatureZnode_docZdocfmtr   r   r   _embed_signature   s   zEmbedSignature._embed_signaturec                    s   t js|S tt| |S r    )r   Z
docstringsr(   r'   __call__r   r,   r   r   rg      s   zEmbedSignature.__call__c                 C   sT   | j }| j}|| _z|j| _ W n ty   |j | _ Y nw | | || _ || _|S r    )r)   r*   r?   AttributeErrorZvisitchildren)r   r   ZoldnameZoldclassr   r   r   visit_ClassDefNode   s   
z!EmbedSignature.visit_ClassDefNodec                 C   s   |S r    r   r   r   r   r   r      s   zEmbedSignature.visit_LambdaNodec                 C   sN  | j d s|S |   d}d}|jjr-| jo|jdk}|s|S d }|j}| jr,| j}d}n| j|j}}t|dd}t|dd}t	|j
| | }| j|||j
|||j||j|jd |d}	|	r|rk| jrk| jjjj}
n|j}
|
jd urw|
j}n|st|d	d d ur|jjj}nd }| |	|}t||
_|st|d	d d urt||jj_|S )
NembedsignatureFr   TZnum_posonly_argsr   Znum_kwonly_args)rb   rc   rV   py_func)r8   r<   rM   Z
is_specialr*   r?   r9   r)   getattrlenrP   rd   Zstar_argZstarstar_argreturn_type_annotationrA   scopedocrk   rf   r   )r   r   Zis_constructorrV   r)   ra   rQ   rT   rR   re   Z
doc_holderold_docnew_docr   r   r   visit_DefNode   sP   



zEmbedSignature.visit_DefNodec                 C   s   |j s|S | jd s|S |   | j| j|jjj|jj|j	d}|rY|j
jd ur-|j
j}nt|dd d ur;|jj
j}nd }| ||}t||j
_t|dd }|d urYt||j
_|S )Nrj   )rc   rk   )Zoverridabler8   r<   rd   r)   Z
declaratorbaser?   rP   rc   rM   rp   rl   rk   rf   r   )r   r   re   rq   rr   rk   r   r   r   visit_CFuncDefNode  s,   

z!EmbedSignature.visit_CFuncDefNodec           
      C   s  | j d s|S |   |j}|j}|j}d }|jdkrE| jr<|jjddd}|jj	s/d| }n|jj
r;|jjd | }n	| jrE| |j}|d u ri|jD ]}|jdkrTqL| jr^d	| j|f }|j}|rh| |}qL|d urd
||f }| ||j}	| jst|	|_|S )Nrj   publicr   r   r=   z'%s'.__get__r^   z%s: %s)r8   r<   rM   bodyr?   Z
visibilityr9   rA   rC   Zis_pyobjectZis_extension_typemodule_namer:   rE   statsr)   rn   r5   rf   rp   r;   r   )
r   r   rM   ry   Z	prop_name	type_namestatZret_annotationre   rr   r   r   r   visit_PropertyNode  sB   






z!EmbedSignature.visit_PropertyNode)r   r   Nr   NF)r   r   Nr   NNNF)r#   r$   r%   r   r3   r5   r<   rI   rJ   rX   rE   rd   rf   rg   ri   r   rs   ru   r~   __classcell__r   r   r,   r   r'   2   s0    	

-r'   N)
__future__r   r   ZVisitorr   ZStringEncodingr   r   r   r   Z
CodeWriterr
   ZErrorsr   r   r'   r   r   r   r   <module>   s    '