o
    Ni.                     @   st   d dl 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 )    N   )CythonTransform)EncodedString)Options)
PyrexTypes   )ExpressionWriter)warningc                   @   s2   e Zd ZdZd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   U/home/ubuntu/.local/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<???>Tz5Failed to convert code to string representation in {}r   levelputr   r   r	   posformatr   noder   r   r   
visit_Node   s   

zAnnotationWriter.visit_Nodec                 C   r   )Nz<lambda>Tz7Failed to convert lambda to string representation in {}r   r   r   r   r   r   r   visit_LambdaNode    s   

z!AnnotationWriter.visit_LambdaNodec                 C   s   |  |jj d S N)r   stringvaluer   r   r   r   visit_AnnotationNode)   s   z%AnnotationWriter.visit_AnnotationNoder   )__name__
__module____qualname____doc__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  | d | _d | _d S r   )superr   
class_name
class_node)r   context	__class__r   r   r   /   s   
zEmbedSignature.__init__c                 C   s   t dd}||}|S )NT)allow_unknown_nodes)r   writer   r   writerresultr   r   r   	_fmt_expr4   s   

zEmbedSignature._fmt_exprc                 C   s   t  }||}|S r   )r
   r,   r-   r   r   r   _fmt_annotation:   s   
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_format@   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_argr8   is_type_argr6   typer   py_object_typedeclaration_coder7   
annotation	_fmt_typer1   defaultr0   )r   argarg_docrD   
defaultvalr   r   r   _fmt_argF   s>   zEmbedSignature._fmt_argc                 C   s.   |j }|jr| js| |j}|d|  }|S )Nr=   )r>   rD   r8   r1   )r   rG   rH   rD   r   r   r   _fmt_star_argc   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?   rJ   appendrK   insert)r   argsnpoargsnpargspargsnkargskargs	hide_selfarglistrG   rH   r   r   r   _fmt_arglistk   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 )	N r   r;   c_string_type _rL   p)
r   rB   r6   rC   r7   	is_stringr5   
is_numeric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)rW   z, z%s(%s)%s.%sz%s -> %s)rY   joinr6   r8   r1   rE   )r   cls_name	func_namerQ   rR   rS   rT   rU   rV   return_exprreturn_typerW   rX   arglist_docfunc_docret_docr   r   r   _fmt_signature   s"   


zEmbedSignature._fmt_signaturec                 C   s\   | j r
| jd r
|S |r| j rd}nd}t|}|||f S | j r(d}|| S d}|| S )Nbindingz	%s
--

%sz%s

%sz%s
--

z%s)r8   r5   inspectcleandoc)r   	signaturenode_docdocfmtr   r   r   _embed_signature   s   
zEmbedSignature._embed_signaturec                    s   t js|S t |S r   )r   
docstringsr%   __call__r   r)   r   r   rv      s   zEmbedSignature.__call__c                 C   sT   | j }| j}|| _z|j| _ W n ty   |j | _ Y nw | | || _ || _|S r   )r&   r'   r>   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   sr  | j d s|S |   d}d}|jjr3| jo|jdk}|r+d }|j}| jr*| j}d}n| j|j}}n| j|j}}t|dd}t|dd}t	|j
| | }| j|||j
|||j||j|jd |d}	|	r|rq| jrq| jjjj}
n|j}
|
jd ur}|
j}n|st|d	d d ur|jjj}nd }| |	|}|jjr|s|jjd urt||
_|st|d	d d urt||jj_|S )
NembedsignatureFr   Tnum_posonly_argsr   num_kwonly_args)rh   ri   rW   py_func)r5   r:   rN   
is_specialr'   r>   r6   r&   getattrlenrQ   rm   star_argstarstar_argreturn_type_annotationrA   scopedocr   rt   wrapperbase_cnamer   )r   r   is_constructorrW   r&   rg   rR   rU   rS   rq   
doc_holderold_docnew_docr   r   r   visit_DefNode   sR   



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|   )ri   r   )overridabler5   r:   rm   r&   
declaratorbaser>   rQ   ri   rN   r   r   r   rt   r   )r   r   rq   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|   publicrZ   r   r;   z'%s'.__get__rd   z%s: %s)r5   r:   rN   bodyr>   
visibilityr6   rA   rC   is_pyobjectis_extension_typemodule_namer7   rE   statsr&   r   r1   rt   r   r8   r   )
r   r   rN   r   	prop_name	type_namestatret_annotationrq   r   r   r   r   visit_PropertyNode  sB   






z!EmbedSignature.visit_PropertyNode)r   r   Nr   NF)r   r   Nr   NNNF)r    r!   r"   r   r0   r1   r:   rJ   rK   rY   rE   rm   rt   rv   r{   r   r   r   r   __classcell__r   r   r)   r   r$   -   s0    	

3r$   )ro   Visitorr   StringEncodingr   rZ   r   r   
CodeWriterr   Errorsr	   r
   r$   r   r   r   r   <module>   s    "