o
    wi.                     @   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   ^/home/ubuntu/sommelier/.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      t  }||}|S r   )r   writer   r   writerresultr   r   r   	_fmt_expr4      
zEmbedSignature._fmt_exprc                 C   r+   r   )r
   r,   r-   r   r   r   _fmt_annotation:   r1   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_argr9   is_type_argr7   typer   py_object_typedeclaration_coder8   
annotation	_fmt_typer2   defaultr0   )r   argarg_docrE   
defaultvalr   r   r   _fmt_argF   s>   zEmbedSignature._fmt_argc                 C   s.   |j }|jr| js| |j}|d|  }|S )Nr>   )r?   rE   r9   r2   )r   rH   rI   rE   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@   rK   appendrL   insert)r   argsnpoargsnpargspargsnkargskargs	hide_selfarglistrH   rI   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 _rM   p)
r   rC   r7   rD   r8   	is_stringr6   
is_numericpy_type_namereplace)r   rB   coderE   r   r   r   rF      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)rX   z, z%s(%s)%s.%sz%s -> %s)rZ   joinr7   r9   r2   rF   )r   cls_name	func_namerR   rS   rT   rU   rV   rW   return_exprreturn_typerX   rY   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)r9   r6   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   rw      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)ri   rj   rX   py_func)r6   r;   rO   
is_specialr'   r?   r7   r&   getattrlenrR   rn   star_argstarstar_argreturn_type_annotationrB   scopedocr   ru   wrapperbase_cnamer   )r   r   is_constructorrX   r&   rh   rS   rV   rT   rr   
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}   )rj   r   )overridabler6   r;   rn   r&   
declaratorbaser?   rR   rj   rO   r   r   r   ru   r   )r   r   rr   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   r<   z'%s'.__get__re   z%s: %s)r6   r;   rO   bodyr?   
visibilityr7   rB   rD   is_pyobjectis_extension_typemodule_namer8   rF   statsr&   r   r2   ru   r   r9   r   )
r   r   rO   r   	prop_name	type_namestatret_annotationrr   r   r   r   r   visit_PropertyNode  sB   






z!EmbedSignature.visit_PropertyNode)r   r   Nr   NF)r   r   Nr   NNNF)r    r!   r"   r   r0   r2   r;   rK   rL   rZ   rF   rn   ru   rw   r|   r   r   r   r   __classcell__r   r   r)   r   r$   -   s0    	

3r$   )rp   Visitorr   StringEncodingr   r[   r   r   
CodeWriterr   Errorsr	   r
   r$   r   r   r   r   <module>   s    "