o
    &[h-                     @   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   V/var/www/vscode/pina/lib/python3.10/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 )emit_stringr   r   r   r   visit_UnicodeNode)   s   z"AnnotationWriter.visit_UnicodeNodec                 C   s   |  |jj d S N)r   string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   r0   r!   )r   r1   r2   r   r   r   _fmt_annotation?   r6   zEmbedSignature._fmt_annotationc                 C   s,   | j d }|dk| _|dk| _|dk| _d S )Nzembedsignature.formatcpythonclinic)current_directivesis_format_cis_format_pythonis_format_clinic)r   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   for_display: %sz = %sz=%s)nameis_self_argr>   is_type_argr<   typer   py_object_typedeclaration_coder=   
annotation	_fmt_typer7   defaultr5   )r   argarg_docrJ   
defaultvalr   r   r   _fmt_argK   s>   zEmbedSignature._fmt_argc                 C   s.   |j }|jr| js| |j}|d|  }|S )NrC   )rD   rJ   r>   r7   )r   rM   rN   rJ   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)entryrE   rP   appendrQ   insert)r   argsnpoargsnpargspargsnkargskargs	hide_selfarglistrM   rN   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   rA   c_string_type _rR   p)
r   rH   r<   rI   r=   	is_stringr;   
is_numericpy_type_namereplace)r   rG   coderJ   r   r   r   rK      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)r]   z, z%s(%s)%s.%sz%s -> %s)r_   joinr<   r>   r7   rK   )r   cls_name	func_namerW   rX   rY   rZ   r[   r\   return_exprreturn_typer]   r^   arglist_docfunc_doc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 )Nbindingz	%s
--

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

z%s)r>   r;   )r   	signaturenode_docdocfmtr   r   r   _embed_signature   s   zEmbedSignature._embed_signaturec                    s   t js|S tt| |S r!   )r   
docstringsr*   r)   __call__r   r.   r   r   ry      s   zEmbedSignature.__call__c                 C   sT   | j }| j}|| _z|j| _ W n ty   |j | _ Y nw | | || _ || _|S r!   )r+   r,   rD   AttributeErrorvisitchildren)r   r   oldname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   Tnum_posonly_argsr   num_kwonly_args)rm   rn   r]   py_func)r;   r@   rT   
is_specialr,   rD   r<   r+   getattrlenrW   rr   star_argstarstar_argreturn_type_annotationrG   scopedocr   rw   r   )r   r   is_constructorr]   r+   rl   rX   r[   rY   rt   
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 )Nr   )rn   r   )overridabler;   r@   rr   r+   
declaratorbaserD   rW   rn   rT   r   r   r   rw   r   )r   r   rt   r   r   r   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 )Nr   publicr   r   rA   z'%s'.__get__ri   z%s: %s)r;   r@   rT   bodyrD   
visibilityr<   rG   rI   is_pyobjectis_extension_typemodule_namer=   rK   statsr+   r   r7   rw   r   r>   r   )
r   r   rT   r   	prop_name	type_namestatret_annotationrt   r   r   r   r   visit_PropertyNode  sB   






z!EmbedSignature.visit_PropertyNode)r   r   Nr   NF)r   r   Nr   NNNF)r%   r&   r'   r   r5   r7   r@   rP   rQ   r_   rK   rr   rw   ry   r~   r   r   r   r   __classcell__r   r   r.   r   r)   2   s0    	

-r)   N)
__future__r   r   Visitorr   StringEncodingr   r   r   r   
CodeWriterr
   Errorsr   r   r)   r   r   r   r   <module>   s    '