o
    j.                     @   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   b/var/www/html/Deteccion_Ine/venv/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)Z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pythonZclinic)current_directivesis_format_cis_format_pythonis_format_clinic)r   Z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   Zfor_display: %sz = %sz=%s)nameis_self_argr6   Zis_type_argr4   typer   py_object_typedeclaration_coder5   
annotation	_fmt_typer0   defaultr/   )r   argarg_docr?   Z
defaultvalr   r   r   _fmt_argF   s>   zEmbedSignature._fmt_argc                 C   s.   |j }|jr| js| |j}|d|  }|S )Nr9   )r:   r?   r6   r0   )r   rB   rC   r?   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;   rD   appendrE   insert)r   argsnpoargsnpargspargsnkargskargs	hide_selfarglistrB   rC   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   r8   Zc_string_type _rF   p)
r   r=   r4   r>   r5   Z	is_stringr3   Z
is_numericZpy_type_namereplace)r   r<   coder?   r   r   r   r@      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)rQ   z, z%s(%s)%s.%sz%s -> %s)rS   joinr4   r6   r0   r@   )r   cls_name	func_namerK   rL   rM   rN   rO   rP   return_exprreturn_typerQ   rR   Zarglist_docZfunc_docZ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 )NZbindingz	%s
--

%sz%s

%sz%s
--

z%s)r6   r3   inspectcleandoc)r   	signatureZnode_docZdocfmtr   r   r   _embed_signature   s   
zEmbedSignature._embed_signaturec                    s   t js|S t |S r   )r   Z
docstringsr%   __call__r   r)   r   r   re      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   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   TZnum_posonly_argsr   Znum_kwonly_args)r^   r_   rQ   py_func)r3   r7   rH   Z
is_specialr'   r:   r4   r&   getattrlenrK   r`   Zstar_argZstarstar_argreturn_type_annotationr<   scopedocri   rd   Zwrapperbase_cnamer   )r   r   Zis_constructorrQ   r&   r]   rL   rO   rM   rc   Z
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 )Nrh   )r_   ri   )Zoverridabler3   r7   r`   r&   Z
declaratorbaser:   rK   r_   rH   rn   rj   ri   rd   r   )r   r   rc   ro   rp   ri   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 )Nrh   publicrT   r   r8   z'%s'.__get__rZ   z%s: %s)r3   r7   rH   bodyr:   Z
visibilityr4   r<   r>   Zis_pyobjectZis_extension_typemodule_namer5   r@   statsr&   rl   r0   rd   rn   r6   r   )
r   r   rH   rw   Z	prop_name	type_namestatZret_annotationrc   rp   r   r   r   visit_PropertyNode  sB   






z!EmbedSignature.visit_PropertyNode)r   r   Nr   NF)r   r   Nr   NNNF)r    r!   r"   r   r/   r0   r7   rD   rE   rS   r@   r`   rd   re   rg   r   rq   rs   r|   __classcell__r   r   r)   r   r$   -   s0    	

3r$   )ra   ZVisitorr   ZStringEncodingr   rT   r   r   Z
CodeWriterr   ZErrorsr	   r
   r$   r   r   r   r   <module>   s    "